mysql 中的舍入未按预期工作

Rounding in mysql doesn't work as expected

我不明白为什么我的结果不同:

我有 table ordersprice 列(输入 double mysql).

数据库中的价格值为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)?

我不明白哪里出了问题,我猜是与转换有关。

谁能给我解释一下?

我不能发表评论,所以我给你写了一个答案。

读这个:http://dev.mysql.com/doc/refman/5.7/en/problems-with-float.html

Float 和 Double 数据,不存储确切的数字,所以可能会发现奇怪的问题。

尝试按照AT-2016告诉你的CEIL,希望你找到解决办法。

最后我将我的列转换为十进制 15,2。我有点担心转换的风险,经过几次测试,价格总和没有差异。我建议每个遇到这个问题的人都这样做。

Best data type to store money values in MySQL

如果数据类型是 float 使用 cast SELECT round(cast(qty as decimal(10,2))*0.99,2) FROM orders WHERE 1