在mysql中舍入不能按预期工作

时间:2016-10-11 14:18:54

标签: php mysql casting double rounding

我无法理解为什么我的结果不同:

我有订单表和价格列(在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)?

我无法理解什么是错的,我想用铸造的东西。

有人可以解释一下吗?

3 个答案:

答案 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。我有点担心转换的风险,经过几次测试后,总价格没有差异。我建议为遇到这个问题的每个人都这样做。

Best data type to store money values in MySQL