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

Floating point 如果我将float的精度降低到8,那么在使用货币时我会得到正确的数字吗?,floating-point,decimal,precision,floating-accuracy,Floating Point,Decimal,Precision,Floating Accuracy,我知道,如果我在计算货币时使用浮点数,如果结果四舍五入到较低的精度,我将有得到错误结果的风险,结果是否相等 >>> 234042163/(2**24) 13.949999988079071 >>> (Decimal("234042163")/(Decimal("2")**Decimal("24"))) Decimal('13.949999988079071044921875') >>> (Decimal("234042163")/(Decim

我知道,如果我在计算货币时使用浮点数,如果结果四舍五入到较低的精度,我将有得到错误结果的风险,结果是否相等

>>> 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/3精确地表示为十进制一样,也不能用浮点数精确地表示某些数字

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


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

尝试将一个非常大的数字添加到一个非常小的数字中,你会看到系统崩溃。即使我应该使用较低的精度?根据当地一家金融机构的说法,在计算投资回报率时,我应该使用8个数字的精度。是的,即使你使用的精度较低$100000000.00+5.74美元,精度为8个单位,即财务数据丢失。