diff options
author | unknown <jimw@mysql.com> | 2005-01-13 09:07:21 -0800 |
---|---|---|
committer | unknown <jimw@mysql.com> | 2005-01-13 09:07:21 -0800 |
commit | ebe1e8a9e65bb3fe04c4523ddf38d3cdfd0e10a8 (patch) | |
tree | 2272a41e1a651f2afff983d1677a93adb94ba959 /sql/field.cc | |
parent | 85a6647fb98cabe01b15b7e732e00285aaf331a5 (diff) | |
parent | 7682d6c9cfa7081dc88b744d1a4f343367309c2b (diff) | |
download | mariadb-git-ebe1e8a9e65bb3fe04c4523ddf38d3cdfd0e10a8.tar.gz |
Merge jwinstead2@wwwtst1.mysql.com:mysql-4.1-7774
into mysql.com:/home/jimw/my/mysql-4.1-clean
sql/field.cc:
Auto merged
Diffstat (limited to 'sql/field.cc')
-rw-r--r-- | sql/field.cc | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/sql/field.cc b/sql/field.cc index 86073072a64..7357bc06f11 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -4301,13 +4301,20 @@ int Field_str::store(double nr) char buff[DOUBLE_TO_STRING_CONVERSION_BUFFER_SIZE]; uint length; bool use_scientific_notation= TRUE; - use_scientific_notation= TRUE; - if (field_length < 32 && fabs(nr) < log_10[field_length]-1) + /* + Check fabs(nr) against longest value that can be stored in field, + which depends on whether the value is < 1 or not, and negative or not + */ + double anr= fabs(nr); + int neg= (nr < 0.0) ? 1 : 0; + if (field_length > 4 && field_length < 32 && + (anr < 1.0 ? anr > 1/(log_10[max(0,field_length-neg-2)]) /* -2 for "0." */ + : anr < log_10[field_length-neg]-1)) use_scientific_notation= FALSE; length= (uint) my_sprintf(buff, (buff, "%-.*g", (use_scientific_notation ? - max(0, (int)field_length-5) : + max(0, (int)field_length-neg-5) : field_length), nr)); /* |