72
If a field has fixed length, truncate the double argument pointed to by 'nr'
74
Also ensure that the argument is within [-max_value; max_value] range.
77
int Field_real::truncate(double *nr, double max_value)
86
set_warning(DRIZZLE_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
89
else if (unsigned_flag && res < 0)
92
set_warning(DRIZZLE_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
98
uint32_t order= field_length - dec;
99
uint32_t step= array_elements(log_10) - 1;
101
for (; order > step; order-= step)
102
max_value*= log_10[step];
103
max_value*= log_10[order];
104
max_value-= 1.0 / log_10[dec];
106
/* Check for infinity so we don't get NaN in calculations */
109
double tmp= rint((res - floor(res)) * log_10[dec]) / log_10[dec];
110
res= floor(res) + tmp;
114
if (res < -max_value)
117
set_warning(DRIZZLE_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
119
else if (res > max_value)
122
set_warning(DRIZZLE_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
133
int Field_real::store_decimal(const my_decimal *dm)
136
my_decimal2double(E_DEC_FATAL_ERROR, dm, &dbl);
140
71
double Field_double::val_real(void)
193
my_decimal *Field_real::val_decimal(my_decimal *decimal_value)
195
double2my_decimal(E_DEC_FATAL_ERROR, val_real(), decimal_value);
196
return decimal_value;
200
124
String *Field_double::val_str(String *val_buffer,
201
125
String *val_ptr __attribute__((unused)))