gpt4 book ai didi

mysql - 这是 MariaDB 中 ROUND 函数的故障吗?

转载 作者:行者123 更新时间:2023-12-04 07:46:58 25 4
gpt4 key购买 nike

在我正在进行的一个项目中,我发现自己在后端和前端进行了相同的计算。计算是四舍五入两个数字与另一个数字之比的乘积,即四舍五入的表达式为

x / y * n


在前端我使用 JavaScript,后端我使用 MariaDB。 x=41, y=60 和 n=30,前端给我 21,这是正确的,因为
41 / 60 * 30
是 20.5 但 MariaDB 的实现 ROUND()当我传递给它这个表达式时,函数给了我 20!
ROUND(41/60*30,0)
即使它 (MariaDB) 评估
41 / 60 * 30
到正确的结果 20.5000
如果我将 20.5 (20.5000) 传递给 MariaDB 的 ROUND()函数,函数返回正确结果 21!我用以下 SQL 语句总结了这个谜(至少对我而言)
SELECT 41/60*30, ROUND(41/60*30,0), ROUND(20.5,0), ROUND(20.5000,0)
其输出低于...
enter image description here ROUND()的实现有问题吗MariaDB 中的函数?

最佳答案

这是一个浮点精度问题;如果你要

SELECT CAST(41/60*30 AS DECIMAL(22,20))
你会得到:
20.49999999000000000000
所以当它四舍五入时,你会得到 20。你可以通过强制转换为 DECIMAL 来解决这个问题。精度较低(例如 (5,3) )或双舍入;例如:
SELECT ROUND(CAST(41/60*30 AS DECIMAL(5, 3))) AS crnd, ROUND(ROUND(41/60*30,3)) AS drnd
输出:
crnd    drnd
21 21
请注意,如果在除法之前进行乘法,则可能会获得更精确的浮点结果。

关于mysql - 这是 MariaDB 中 ROUND 函数的故障吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67158065/

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