我正在使用python3.9并试图计算以下内容:
-14.7617.36。这是一个非常简单的计算,输出应该是2.6,不需要任何其他额外的数字。
但是,在python3.9中,我得到以下输出:
>>> 17.36-14.76
2.5999999999999996
我知道,我可以把结果四舍五入得到想要的输出。然而,我不明白为什么它以一种奇怪的方式计算它,因为17.36-14.76不是2.599999999999999996,17.36-14.76是2.6。
是否有一些奇怪的设置python?
这是因为计算机上的浮点运算使用以2为基数而不是我们熟悉的以10为基数来存储数字。这意味着你没有真正的17.36
和14.76
在那里(因为你不能精确地以2为基底表示它们),但实际上是一个近似值:
>>> f'{17.36:.30}'
'17.3599999999999994315658113919'
>>> f'{14.76:.30}'
'14.759999999999999786837179272'
>>>
>>> f'{17.36-14.76:.30}'
'2.59999999999999964472863211995'
请注意,1/2
和1/4
等数字实际上可以用2进制表示:
>>> f'{.25:.30}'
'0.25'
这就是为什么如果你关心精确的数字(比如货币中的分值),通常你想使用整数而不是浮点数的原因。
另一个可能的解决方法是使用Decimal
类(它本质上只是记住其小数点位置的整数)。在这里传递字符串而不是浮点数是很重要的:
>>> Decimal('17.36') - Decimal('14.76')
Decimal('2.60')
使用Decimal
>>> from decimal import Decimal
>>> result = Decimal(17.36) - Decimal(14.76)
>>> f'{result:.2f}'
'2.60'