gpt4 book ai didi

mysql 舍入误差和聚合函数

转载 作者:行者123 更新时间:2023-11-29 13:08:24 24 4
gpt4 key购买 nike

我有这张订单表

+-----+--------+--------+-----------+-----------+
| id|order_id| price| tax| qty |
+-----+--------+--------+-----------+-----------+
| 5| 123| 231.40| 50.91| 1|
+-----+--------+--------+-----------+-----------+
| 6| 123| 210.74| 46.36| 1|
+-----+--------+--------+-----------+-----------+

此查询用于获取订单 123 的结果

SELECT Sum(price * qty)               AS tot_sub,
( Sum(( price + tax ) * qty) ) AS tot
FROM products
WHERE order_id = 123

这就是结果

+-------+-----------------+
|tot_sub|tot |
+-------+-----------------+
|442.14 |539.4100000000001|
+-------+-----------------+

我期待 tot 的完美值 (539.41)

我知道 float 的内部表示(通常)可能存在一些错误,并且与确切的理论数不同。

在这种情况下,我可以编写一个更好的查询来避免此错误而不使用 ROUND 函数吗?

谢谢

最佳答案

使用转换为十进制

更改:

SELECT Sum(price * qty) AS tot_sub,
( Sum(( price + tax ) * qty) ) AS tot
FROM products
WHERE order_id = 123

致:

SELECT Sum(price * qty) AS tot_sub,
Sum( ( cast( price as decimal(10,2) )
+ cast( tax as decimal(10,2) ) ) * qty ) AS tot
FROM products
WHERE order_id = 123

引用:

关于mysql 舍入误差和聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22403503/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com