Commit 1f22720c authored by unknown's avatar unknown

Fixed the floating point number tests on Windows.


mysql-test/r/insert.result:
  Fixed the test cases.
mysql-test/t/cast.test:
  We need to do replace_result because warnings are printed by another procedure.
mysql-test/t/insert.test:
  Windows implements a different rounding rules in printf("%g"), thus we still need to do replace_result.
sql/field.cc:
  Limit the precision to avoid garbage past the significant digits.
parent d8d07eff
...@@ -500,23 +500,23 @@ Warnings: ...@@ -500,23 +500,23 @@ Warnings:
Warning 1265 Data truncated for column 'c' at row 1 Warning 1265 Data truncated for column 'c' at row 1
SELECT * FROM t1; SELECT * FROM t1;
a b c a b c
9.999999000000000748 10 10 9.999999 10 10
1.225e-05 1.2e-05 1e-0 1.225e-05 1.2e-05 1e-0
0.0001225 0.00012 NULL 0.0001225 0.00012 NULL
0.122499999999999998 0.1225 NULL 0.1225 0.1225 NULL
0.122587699999999994 0.12259 NULL 0.1225877 0.12259 NULL
12.25 12.25 NULL 12.25 12.25 NULL
12.25 12.25 12.2 12.25 12.25 12.2
122500 122500 NULL 122500 122500 NULL
12250000000 1.2e+10 NULL 12250000000 1.2e+10 NULL
1225000000000000 1.2e+15 NULL 1.225e+15 1.2e+15 NULL
5000000 5000000 NULL 5000000 5000000 NULL
1.25e+78 1.2e+78 NULL 1.25e+78 1.2e+78 NULL
1.25e-94 1.2e-94 NULL 1.25e-94 1.2e-94 NULL
1.25e+203 1e+203 NULL 1.25e+203 1e+203 NULL
1.25e-175 1e-175 NULL 1.25e-175 1e-175 NULL
1.225000000000000089 NULL 1.23 1.225 NULL 1.23
1.370000000000000107 NULL 1.37 1.37 NULL 1.37
-1.37 NULL -1.3 -1.37 NULL -1.3
0.00187 NULL 0.00 0.00187 NULL 0.00
-0.0187 NULL -0.0 -0.0187 NULL -0.0
...@@ -554,23 +554,23 @@ INSERT INTO t1(a,c) VALUES (5000e+0, 5000e+0); ...@@ -554,23 +554,23 @@ INSERT INTO t1(a,c) VALUES (5000e+0, 5000e+0);
INSERT INTO t1(a,c) VALUES (-5000e+0, -5000e+0); INSERT INTO t1(a,c) VALUES (-5000e+0, -5000e+0);
SELECT * FROM t1; SELECT * FROM t1;
a b c a b c
9.999999000000000748 10 9.999 9.999999 10 9.999
1.225e-05 1.2e-05 1e-05 1.225e-05 1.2e-05 1e-05
0.0001225 0.00012 NULL 0.0001225 0.00012 NULL
0.122499999999999998 0.1225 NULL 0.1225 0.1225 NULL
0.122587699999999994 0.12259 NULL 0.1225877 0.12259 NULL
12.25 12.25 NULL 12.25 12.25 NULL
12.25 12.25 12.25 12.25 12.25 12.25
122500 122500 NULL 122500 122500 NULL
12250000000 1.2e+10 NULL 12250000000 1.2e+10 NULL
1225000000000000 1.2e+15 NULL 1.225e+15 1.2e+15 NULL
5000000 5000000 NULL 5000000 5000000 NULL
1.25e+78 1.2e+78 NULL 1.25e+78 1.2e+78 NULL
1.25e-94 1.2e-94 NULL 1.25e-94 1.2e-94 NULL
1.25e+203 1e+203 NULL 1.25e+203 1e+203 NULL
1.25e-175 1e-175 NULL 1.25e-175 1e-175 NULL
1.225000000000000089 NULL 1.225 1.225 NULL 1.225
1.370000000000000107 NULL 1.37 1.37 NULL 1.37
-1.37 NULL -1.37 -1.37 NULL -1.37
0.00187 NULL 0.002 0.00187 NULL 0.002
-0.0187 NULL -0.01 -0.0187 NULL -0.01
......
...@@ -177,6 +177,8 @@ select cast(1.0e+300 as signed int); ...@@ -177,6 +177,8 @@ select cast(1.0e+300 as signed int);
CREATE TABLE t1 (f1 double); CREATE TABLE t1 (f1 double);
INSERT INTO t1 SET f1 = -1.0e+30 ; INSERT INTO t1 SET f1 = -1.0e+30 ;
INSERT INTO t1 SET f1 = +1.0e+30 ; INSERT INTO t1 SET f1 = +1.0e+30 ;
# Expected result is +-1e+30, but Windows returns +-1e+030.
--replace_result 1e+030 1e+30
SELECT f1 AS double_val, CAST(f1 AS SIGNED INT) AS cast_val FROM t1; SELECT f1 AS double_val, CAST(f1 AS SIGNED INT) AS cast_val FROM t1;
DROP TABLE t1; DROP TABLE t1;
......
...@@ -386,7 +386,9 @@ INSERT INTO t1(a,c) VALUES (1.87e-3, 1.87e-3); ...@@ -386,7 +386,9 @@ INSERT INTO t1(a,c) VALUES (1.87e-3, 1.87e-3);
INSERT INTO t1(a,c) VALUES (-1.87e-2, -1.87e-2); INSERT INTO t1(a,c) VALUES (-1.87e-2, -1.87e-2);
INSERT INTO t1(a,c) VALUES (5000e+0, 5000e+0); INSERT INTO t1(a,c) VALUES (5000e+0, 5000e+0);
INSERT INTO t1(a,c) VALUES (-5000e+0, -5000e+0); INSERT INTO t1(a,c) VALUES (-5000e+0, -5000e+0);
# Expected results are "12.2" and "1.2e+78", but Windows returns "12.3" and
# "1.3e+78" due to different rounding rules
--replace_result 12.3 12.2 1.3e+78 1.2e+78
SELECT * FROM t1; SELECT * FROM t1;
DROP TABLE t1; DROP TABLE t1;
......
...@@ -5954,7 +5954,7 @@ int Field_str::store(double nr) ...@@ -5954,7 +5954,7 @@ int Field_str::store(double nr)
if (exp >= (int) digits || exp < -4) if (exp >= (int) digits || exp < -4)
digits= max(0, (int) (max_length - 5 - (exp >= 100 || exp <= -100))); digits= max(0, (int) (max_length - 5 - (exp >= 100 || exp <= -100)));
length= (uint) my_sprintf(buff, (buff, "%-.*g", digits, nr)); length= (uint) my_sprintf(buff, (buff, "%-.*g", min(digits, DBL_DIG ), nr));
#ifdef __WIN__ #ifdef __WIN__
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment