Adding decimal numbers to a decimal number not working properly in python
本问题已经有最佳答案,请猛点这里访问。
我试着把十进制数加上一个十进制数,它能正确地工作,但当我做
谢谢。
如前所述,0.1不能在IEEE754浮点中精确表示。你可以读懂为什么每个计算机科学家都应该知道浮点运算或浮点指南。
您可以构造或舍入值:
1 2 3 4 5 6 7 | >>> round(1.1+.1,2) 1.2 >>>"%.*f" % (1, 1.1+.1 ) '1.2' >>> s=str(1.1+.1) >>> s[0:s.find('.')+2] '1.2' |
。
如果要精确表示这些值,请考虑使用十进制模块:
1 2 3 | >>> import decimal >>> decimal.Decimal('1.1')+decimal.Decimal('.1') Decimal('1.2') |
注意,您需要从float的字符串表示开始,
1 2 | >>> decimal.Decimal(.1) Decimal('0.1000000000000000055511151231257827021181583404541015625') |
。
要在计算后返回字符串表示,可以使用
1 2 | >>> str(sum(map(decimal.Decimal,['.1','.1','.5','.5']))) '1.2' |
。
另一种选择是使用有理数库,如分数:
1 2 3 | >>> from fractions import Fraction as Fr >>> Fr(11,10)+Fr(1,10) Fraction(6, 5) |
有了这个结果,您仍然需要舍入、截断或使用任意精度的算术包来获得精确的数字(取决于输入…)
您可以在这里尝试字符串格式和文档。
1 2 | >>>"%0.2f" % float(1.1 + 0.1) '1.20' |
号
甚至:
1 2 | >>>"%0.1f" % float(1.1 + 0.1) '1.2' |
至于原因,本文在PEP 327中有明确描述。
这是你问题的字面回答:
1 | float(str(1.1 + 0.1)[0:3]) |
如果您对问题的"原因"感兴趣,请参阅问题注释中提供的链接。