我正在使用python中的数据类型。
每次,当我这样做
remaining_amount = .1 + .1 + .1 - .3
python给出指数结果。
我尝试用c#做同样的事情
double remainingAmount = .1 + .1 + .1 - .3
它也以指数形式给出结果。
在这两种情况下,结果均为 5.55111512312578E-17
但是在 c#中,当我将double更改为十进制时,结果为0.0
我无法理解为什么两种语言都在发生这种情况。 以及如何在python中解决这个问题?
答案 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
>>>