在mysql中插入double值时出现问题

时间:2013-12-31 06:05:42

标签: mysql

我创建了一个表。

CREATE TABLE `test` ( `duration` double(20,5) DEFAULT NULL);

当我插入记录时。

insert into test(duration) values(1.4002860713999996E8);

以这种方式插入。

+-----------------+
| duration        |
+-----------------+
| 140028607.14000 |

预计1.40029在哪里。任何人都可以解释一下这个原因吗?如何插入确切的值?

3 个答案:

答案 0 :(得分:2)

1.4002860713999996E8中的E是指数,这意味着1.40002 ... * 10 ^ 8,这就是为什么你得到插值为140028607.14000

如果你想保存完全相同的值,我会说使用VARCHAR来存储数据,并且你可以在使用它时将它强制转换为双倍,希望它能帮助你。

答案 1 :(得分:1)

E8最终意味着

1.4002860713999996E8 = 1.4002860713999996 * 10^8 = 
   1.4002860713999996 * 100000000 = 140028607.13999996. 

一旦double(20,5),那么MySQL在存储值时会执行舍入,只留下小数点后的5位数,我们得到140028607.14000

答案 2 :(得分:0)

在插入使用指数形式的数据时,它会返回正确的结果。

1.4002860713999996E8中的E8表示1.4002860713999996E8到10的幂8。