Ali*_*ina 2 python floating-point
我正在使用 python3.9 并尝试计算以下内容:
17.36-14.76。这是一个非常简单的计算,输出应该是 2.6,没有任何其他额外的数字。
但是,在 python3.9 中,我得到以下输出:
>>> 17.36-14.76
2.5999999999999996
Run Code Online (Sandbox Code Playgroud)
我知道,我可以将结果四舍五入以获得所需的输出。但是,我不明白为什么它以一种奇怪的方式计算它,因为 17.36-14.76 不是 2.5999999999999996,17.36-14.76 是 2.6。
python有一些奇怪的设置吗?
这是因为计算机上的浮点运算使用 base-2 来存储数字,而不是我们熟悉的 base-10。这意味着你并没有真正拥有17.36
和14.76
那里(因为你不能在 base-2 中准确地表示它们),但实际上是一个近似值:
>>> f'{17.36:.30}'
'17.3599999999999994315658113919'
>>> f'{14.76:.30}'
'14.759999999999999786837179272'
>>>
>>> f'{17.36-14.76:.30}'
'2.59999999999999964472863211995'
Run Code Online (Sandbox Code Playgroud)
请注意,一些数字(例如1/2
和 )1/4
实际上可以使用基数 2 精确表示:
>>> f'{.25:.30}'
'0.25'
Run Code Online (Sandbox Code Playgroud)
这就是为什么如果您关心确切的数字(例如货币中的美分值),通常您希望使用整数而不是浮点数。
另一种可能的解决方法是使用Decimal
类(它本质上只是记住小数点位置的整数)。在这里传递字符串而不是浮点数很重要:
>>> Decimal('17.36') - Decimal('14.76')
Decimal('2.60')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
57 次 |
最近记录: |