mysql 有关金额的问题 1 之前我设置 一个表的a,b,c 3个字段都是double(10,10)
之后执行update a set c=a-b 结果c的数据错误 ,都是 0.999999 -0.99999999999
不知道为什么会出现这样的错误 ??
(后来随手double(10,2), 这样问题圆满解决,虽然解决了,也不知道原因? )2 有一条数据是
a 1.00000008440786E18 这个数据的值是多少?
b 1.00000010010111E18
c 99999999.99 -----------------? 是否是错误 c =a-b
之后执行update a set c=a-b 结果c的数据错误 ,都是 0.999999 -0.99999999999
不知道为什么会出现这样的错误 ??
(后来随手double(10,2), 这样问题圆满解决,虽然解决了,也不知道原因? )2 有一条数据是
a 1.00000008440786E18 这个数据的值是多少?
b 1.00000010010111E18
c 99999999.99 -----------------? 是否是错误 c =a-b
如果需要更精确的金额计算,则建议使用 decimal
MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
检查发现是数据越界 。 c 是 (10,2) 他不能支持 1.00000008440786e+18 | 1.00000010010111e+18 | 15693252608c 的具体值是 15693252608 但是无法支持 10,2 所以失败
比如 1.00000008440786E18 他能存储decimal (10,2)就无能为力 , 只能为 99999999.99而当前的哟应用值 的金额是没有限制的 恶
[16:28:12] bruce: select * from tnum;
+------------+ float
| id |
+------------+
| 1.2911e+12 |
| 1.2911e+12 |
| 1.2911e+11 |
| 1.2911e+11 |
| 1.2911e+11 |
+------------129110073344.68+
5 rows in set
id | double
+---------------+
| 1291100749824 |
| 1291100749824 |
| 129110073344 |
| 129110073344 |
| 129110073344.67776767 |