round() 函数[重复]

问题描述 投票:0回答:1

我有一堆python-PostGreSQL,我正在开发一个包含计算的项目,最近我发现计算中有一些不准确的地方,所以我开始调试。我使用 python 的 round() 函数对值进行四舍五入,并使用 PostgreSQL 的 numeric() 函数对货币值进行四舍五入。我发现 python 的 round 函数表现得有点奇怪。

>>> round(3.935, 2)
>>> 3.94
>>> round(4.935, 2)
>>> 4.93

有人可以帮我吗?文件上的内容太混乱了,难以理解,他们说它遵循银行家的四舍五入。虽然银行家的舍入方案本身将值 round(4.935, 2) 舍入为 4.94...

我尝试在网上阅读很多相关内容,但找不到解决此问题的正确解决方案。 请提出更好的处理方法。

提前谢谢您。

python python-3.x postgresql rounding numeric
1个回答
0
投票

这只是浮点的“生活事实”。 数字 3.935 和 4.935 无法用二进制精确表示,因此您得到的是一个近似值。 对于 3.935,最接近的近似值稍高,而对于 4.935,最接近的近似值稍低。 银行家四舍五入在这里不适用,因为数字并不准确。

您可能需要提供自己的路由函数来添加一个小的 epsilon 值。

© www.soinside.com 2019 - 2024. All rights reserved.