我创建了一个表。
CREATE TABLE `test` ( `duration` double(20,5) DEFAULT NULL);
当我插入记录时。
insert into test(duration) values(1.4002860713999996E8);
以这种方式插入。
+-----------------+
| duration |
+-----------------+
| 140028607.14000 |
预计1.40029在哪里。任何人都可以解释一下这个原因吗?如何插入确切的值?
答案 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。