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)
作为数据类型。
为什么会这样?
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)
作为数据类型。