mysql 中的舍入未按预期工作
Rounding in mysql doesn't work as expected
我不明白为什么我的结果不同:
我有 table orders 和 price 列(输入 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
我不明白为什么我的结果不同:
我有 table orders 和 price 列(输入 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