mysql舍入问题

iibxawm4  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(404)

为什么会这样?

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?
仅供参考:装运和行项目为十进制(10,2),税金为双倍

5cnsuln7

5cnsuln71#

尝试

SELECT 1.00 * 1.0

你会得到 1.000 . 这是因为 DECIMAL(a,b) * DECIMAL(c,d) 需要一个 DECIMAL(a+c,b+d) 作为数据类型。

bt1cpqcv

bt1cpqcv2#

我对mysql了解不多,但我猜它是基于列类型的隐式转换。也许你可以试着把所有的东西都选出来,直到你发现问题出在哪里。小数(10,2)只允许2位小数(这就是2)

相关问题