如果我将浮点数的精度降低到8,那么在使用货币时我会得到正确的数字吗?

时间:2016-07-07 13:31:03

标签: floating-point decimal precision floating-accuracy

我知道如果我在计算金钱时使用浮动数字,如果结果四舍五入到较低的精度,我将有可能得到不正确的结果,结果是否相等?

>>> 234042163/(2**24)
13.949999988079071
>>> (Decimal("234042163")/(Decimal("2")**Decimal("24")))
Decimal('13.949999988079071044921875')
>>> (Decimal("234042163")/(Decimal("2")**Decimal("24"))).quantize(Decimal("1.00000000"))
Decimal('13.94999999')
>>> round(234042163/(2**24), 8)
13.94999999

1 个答案:

答案 0 :(得分:1)

不,不是。浮点数始终具有完全精度,当您对它们执行任何操作时,不准确性将导致问题。此外,主要问题不是准确性有限,而是有些数字无法准确表示。就像你不能准确地将1/3精确地表示为十进制一样,你不能用浮点数准确地表示一些数字。

如果使用这些数字执行操作,即使您尝试将它们舍入到一定数量的数字,也会出现问题。

进行正确货币计算的唯一方法是使用缩放整数,这意味着许多语言中的十进制类型。它可以准确地表示其范围内的数字,不会引起问题。