MYSQL 舍入问题

MYSQL Rounding issue

为什么会这样?

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;

returns:

.07
925.00
62.50
69.12
69.125

但是这个:

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

Returns正确的:

69.13
69.1250

为什么那个末尾多了一个0?

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

我对 MySQL 了解不多,但我猜这是基于列类型的隐式转换。也许尝试铸造一切,直到你发现是什么给你带来了问题。 DECIMAL(10,2) 只允许 2 位小数(这就是 2 的含义)

尝试

SELECT 1.00 * 1.0

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