diff options
author | unknown <serg@serg.mylan> | 2004-08-19 11:21:08 +0200 |
---|---|---|
committer | unknown <serg@serg.mylan> | 2004-08-19 11:21:08 +0200 |
commit | 8001a7db2b516069289db041bdac9cede64892ce (patch) | |
tree | c78fafa8231fbdbc5ba79dd5883af4dab3bf580b /sql | |
parent | e769d459f72a42e1b160408b8ca2b46fa3b90391 (diff) | |
download | mariadb-git-8001a7db2b516069289db041bdac9cede64892ce.tar.gz |
take dec. point into account in store_double_in_string
Diffstat (limited to 'sql')
-rw-r--r-- | sql/field.cc | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/sql/field.cc b/sql/field.cc index 33717d99583..1b5c688fe7a 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -3716,7 +3716,7 @@ static void store_double_in_string_field(Field_str *field, uint32 field_length, { bool use_scientific_notation=TRUE; char buff[DOUBLE_TO_STRING_CONVERSION_BUFFER_SIZE]; - int length; + uint length; if (field_length < 32 && nr > 1) { if (field->ceiling == 0) @@ -3732,11 +3732,17 @@ static void store_double_in_string_field(Field_str *field, uint32 field_length, } use_scientific_notation= (field->ceiling < nr); } - length= sprintf(buff, "%-.*g", - use_scientific_notation ? max(0,field_length-5) : field_length, - nr); - DBUG_ASSERT(length <= field_length); - field->store(buff, (uint) length); + length= (uint)sprintf(buff, "%-.*g", + use_scientific_notation ? max(0,field_length-5) : field_length, + nr); + /* + +1 below is because "precision" in %g above means the + max. number of significant digits, not the output width. + Thus the width can be larger than number of significant digits by 1 + (for decimal point) + */ + DBUG_ASSERT(length <= field_length+1); + field->store(buff, min(length, field_length)); } void Field_string::store(double nr) |