Eth*_*wer -1 python floating-point
这更多是出于兴趣而提出的问题。在我天真的情况下,不知道到底Decimal()应该如何使用,我认为当我做类似的事情时它会工作得很好Decimal(120.24)。不过请看下面的代码:
>>> d = Decimal(120.24)
>>> d
Decimal('120.2399999999999948840923025272786617279052734375')
Run Code Online (Sandbox Code Playgroud)
我更改了代码的工作方式,以避免因此而出现的一些问题,但我的问题在于为什么会发生这种情况。我做了一些搜索,试图找到一个简单的答案,但大多数问题都是问如何使用这两种类型,而不是更一般的“为什么”问题。
所以,我的问题是:幕后发生了什么导致小数变得如此不准确?为什么它不直接显示为Decimal('120.24')?
换句话说,为什么Python本身对待浮点数与小数不同?为什么浮动“不准确”?据我所知,在大多数其他语言中,浮点数精确到特定点。绝对超过小数点后两位。
作为参考,我使用的是 Python 3.6。
到十进制的转换是准确的。120.2399999999999948840923025272786617279052734375 是最接近实数 120.24 的 IEEE754 64 位浮点数,因此是 的精确值d。
您可以通过将字符串传递给 Decimal 来避免转换为浮点:
d = Decimal("120.24")
print (d)
Run Code Online (Sandbox Code Playgroud)
印刷120.24
有关更多讨论和教程,请参阅十进制十进制定点和浮点算术。
| 归档时间: |
|
| 查看次数: |
482 次 |
| 最近记录: |