我无法理解为什么我的结果不同:
我有订单表和价格列(在mysql中输入 double )。
数据库中的价格值 13.5 。
查询:
SELECT ROUND(price * 0.09, 2) FROM orders where id = 1;
结果是: 1.21
查询:
SELECT ROUND(13.5 * 0.09, 2);
结果是 1.22
没有舍入:SELECT 13.5 * 0.09
结果 1.215
所以圆后的正确结果是 1.22 。
为什么查询SELECT ROUND(price * 0.09, 2) FROM orders where id = 1;
给我错误的结果(1.21)?
我无法理解什么是错的,我想用铸造的东西。
有人可以解释一下吗?
答案 0 :(得分:2)
我无法发表评论,所以我给你写了答案。
阅读本文:http://dev.mysql.com/doc/refman/5.7/en/problems-with-float.html
Float和Double数据,不存储确切的数字,因此可能会发现奇怪的问题。
尝试CEIL,因为AT-2016告诉你,希望你找到解决方案。
答案 1 :(得分:2)
如果数据类型为float,则使用强制转换 SELECT round(cast(数量为十进制(10,2))* 0.99,2)FROM FROM WHERE 1
答案 2 :(得分:1)
我最后将列转换为十进制15,2。我有点担心转换的风险,经过几次测试后,总价格没有差异。我建议为遇到这个问题的每个人都这样做。