MYSQL取整问题

时间:2018-07-19 18:52:58

标签: mysql rounding rounding-error

为什么会这样?

SELECT 
c.tax_rate, 
c.line_item_total_price, 
c.shipping_total_price, 
ROUND((c.tax_rate * 
(c.line_item_total_price+c.shipping_total_price)),2), 
(c.tax_rate * (c.line_item_total_price+c.shipping_total_price)) 
FROM carts c
WHERE c.id = 323002;

返回:

.07
925.00
62.50
69.12
69.125

但这是

SELECT 
ROUND((.07 * (925.00+62.50)),2), 
(.07 * (925.00+62.50));

返回正确的内容:

69.13
69.1250

为什么在那个数字的末尾再加上0?

仅供参考:运输和订单项为DECIMAL(10,2),税为DOUBLE

2 个答案:

答案 0 :(得分:1)

我对MySQL不太了解,但我想这是基于列类型的隐式转换。也许尝试投射所有内容,直到找到导致问题的原因。 DECIMAL(10,2)仅允许2个小数位(这是2个小数)

答案 1 :(得分:0)

尝试

SELECT 1.00 * 1.0

您将获得1.000。这是因为DECIMAL(a,b) * DECIMAL(c,d)的确切结果需要DECIMAL(a+c,b+d)作为数据类型。

相关问题