summaryrefslogtreecommitdiff
path: root/sql/field.cc
diff options
context:
space:
mode:
authorunknown <jimw@mysql.com>2005-01-13 09:07:21 -0800
committerunknown <jimw@mysql.com>2005-01-13 09:07:21 -0800
commitebe1e8a9e65bb3fe04c4523ddf38d3cdfd0e10a8 (patch)
tree2272a41e1a651f2afff983d1677a93adb94ba959 /sql/field.cc
parent85a6647fb98cabe01b15b7e732e00285aaf331a5 (diff)
parent7682d6c9cfa7081dc88b744d1a4f343367309c2b (diff)
downloadmariadb-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.cc13
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));
/*