python中奇怪的十进制输出



我正在使用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.3614.76在那里(因为你不能精确地以2为基底表示它们),但实际上是一个近似值:

>>> f'{17.36:.30}'
'17.3599999999999994315658113919'
>>> f'{14.76:.30}'
'14.759999999999999786837179272'
>>>
>>> f'{17.36-14.76:.30}'
'2.59999999999999964472863211995'

请注意,1/21/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'

相关内容

  • 没有找到相关文章

最新更新