这更多的是出于兴趣的问题。我天真地不知道应该如何使用Decimal()
,我认为当我做类似Decimal(120.24)
的事情时,它会很好地工作。但是,请参见以下代码:
>>> d = Decimal(120.24)
>>> d
Decimal('120.2399999999999948840923025272786617279052734375')
我更改了代码的工作方式,从而避免了由此引起的一些问题,但是我的问题在于,为什么这一切都会发生。我做了一些尝试,试图找到一个简单的答案,但是大多数问题都在问如何使用这两种类型,而不是更普遍的“为什么” 问题。
所以,我的问题是:在幕后发生了什么,使得小数点变得如此微不足道?为什么它不以Decimal('120.24')
的形式出现?
换句话说,为什么Python本身对待浮点数与十进制数不同?为什么花车“不准确”?据我所知,在大多数其他语言中,浮点数在特定点上都是准确的。绝对超过2个小数位。
作为参考,我使用的是Python 3.6。
答案 0 :(得分:4)
精确到十进制的转换。 120.23999999999999999948840923025272786617279052734375是最接近实数120.24的IEEE754 64位浮点数,因此是d
的精确值。
您可以通过将字符串传递给Decimal来避免转换为浮点数:
d = Decimal("120.24")
print (d)
打印120.24
有关更多讨论和教程,请参见十进制Decimal fixed point and floating point arithmetic。
答案 1 :(得分:-2)
Decimals可以精确地以二进制形式表示,而浮点数则不一定。