“四舍五入”的价值能保证平等吗?

Does a "round"'ed value guarantee equality?

提问人:roulette01 提问时间:10/17/2023 更新时间:10/17/2023 访问量:47

问:

假设我有一些浮点值。假设我们这样做,即我们在小数点后第 3 位后截断。xx = round(x, 3)

然后,如果我们检查以下内容:

x == 0.222

这是否保证小数点后第 3 位后没有可比性?

Python 浮点

评论

0赞 Jab 10/17/2023
据我所知,可能值得一试 decimal
0赞 buran 10/17/2023
我建议检查 stackoverflow.com/q/5595425/4046632
0赞 roulette01 10/17/2023
@Jab我意识到我应该先问另一个问题。我只是在这里问了 stackoverflow.com/questions/77304463/......我觉得我在这里的前提实际上是错误的
0赞 dawg 10/17/2023
作为快捷方式,您可以使用 .虽然即使在四舍五入后,flaot 的内部表示也可能不同,但四舍五入后的表示将是相同的。作为长切(和正确的方式),您可以涉足位或使用 .repr(round(x,3))==repr(round(y,3))Decimal

答:

1赞 user1245262 10/17/2023 #1

这取决于你的意思。请看以下示例:

>>> x = round(0.2221,3)
>>> x == 0.222
True
>>> x = round(0.2225,3)
>>> x == 0.222
False
>>> x = round(0.2221,3)
>>> y = 0.2221
>>> x == y
False
>>>

在第一种情况下,向下舍入为 ,因此两者相等。在第二种情况下,它被四舍五入,所以它们不是。在第三种情况下,即使向下舍入,它仍然不等于小数点后具有更多数字的值,这仍将向下舍入。x0.222

如果要保证仅使用小数点后的前三个数字,则需要截断(或舍入)每个数字。

这有帮助吗?

评论

0赞 roulette01 10/17/2023
投了赞成票,但我意识到我的前提可能实际上是错误的。以下是我们的实际用例:stackoverflow.com/questions/77304463/... (这是一个单独的问题,我应该问而不是这个问题)
2赞 user1245262 10/17/2023
@roulette01 - 你可能想尝试乘以 1000 并转换为整数,然后再存储到 db 中,然后把自己想象成以毫为单位工作,或者记得在需要时潜入 1000。