如何修复python浮点数指数结果

时间:2019-05-06 05:54:17

标签: c# python double decimal

我正在使用python中的数据类型。

每次,当我这样做

remaining_amount = .1 + .1 + .1 - .3

python给出指数结果。

我尝试用c#做同样的事情

double remainingAmount = .1 + .1 + .1 - .3

它也以指数形式给出结果。

在这两种情况下,结果均为 5.55111512312578E-17

但是在 c#中,当我将double更改为十进制时,结果为0.0

我无法理解为什么两种语言都在发生这种情况。 以及如何在python中解决这个问题?

2 个答案:

答案 0 :(得分:1)

这是数字的Python表示形式,该数字仍然相同。 您可以使用它来格式化字符串以打印字母,例如:

>>> remaining_amount  = .1 + .1 + .1 - .3
>>> remaining_amount
5.551115123125783e-17
>>> f"{remaining_amount:.50f}"
'0.00000000000000005551115123125782702118158340454102'

答案 1 :(得分:1)

@Netwave是正确的,因为您想在python中修复此问题,所以方法应该是decimal模块:

>>> from decimal import Decimal
>>> Decimal('.1') + Decimal('.1') + Decimal('.1') - Decimal('.3')
Decimal('0.0')
>>> float(Decimal('.1') + Decimal('.1') + Decimal('.1') - Decimal('.3'))
0.0
>>>