时间:2021-07-01 10:21:17 帮助过:1人阅读
+------+---------------------+--------------------+
| i | a | b |
+------+---------------------+--------------------+
| 1 | 21.400001525878906 | 21.399999618530273 |
| 2 | 76.79999828338623 | 76.80000114440918 |
| 3 | 7.399999618530273 | 7.400000095367432 |
| 5 | 7.200000762939453 | 7.199999809265137 |
| 6 | -51.400001525878906 | 0 |
+------+---------------------+--------------------+
解决方案
1、decimal
在MySQL中,带有小数的精确运算可以使用decimal类型
CREATE TABLE t3 (i INT, d1 decimal(10,3), d2 decimal(10,3));
+------+---------+-------+
| i | a | b |
+------+---------+-------+
| 6 | -51.400 | 0.000 |
+------+---------+-------+
限制
decimal的精确表示为decimal(M,D),其中M最大为65,D最大为30。因此其表示的范围是远远小于double所能表示的范围
2、基于应用的解决方案
比如商品价格涉及到小数,用20.95元表示,那么可以把价格变成以分为单位,即变成2095。
结论
不要使用float、double以及其等价类型做精确计算。如果要在MySQL中做精确计算,推荐使用decimal或者将相关计算任务交给应用。
如有疑问请联系微信:onesoft007
MySQL浮点计算存在的问题与解决方案
标签: