读书人

这是不是python的bug,该如何解决

发布时间: 2012-05-02 15:36:04 作者: rapoo

这是不是python的bug
做运算的时候发现python把1/28.0计算错了

1/28.0计算下来应该是个循环小数吧
0.03(571428)
括号里面是循环小数
可是python这样计算下来居然不循环,害死我了啊,找了半天bug,居然在这里

Python code
>>> decimal.Decimal(1/28.0)Decimal('0.03571428571428571230317317031222046352922916412353515625')

求高人指点python中怎样做才能准确无误的计算

[解决办法]
csdn说我贴的这些语句里有非法字符,只好截个图发一下了。

[解决办法]
不对的那个应该是先进行了实点数运算才转换成Decimal的吧,进行运算时结果已经不精确了,再转换成Decimal就是那个不精确的结果了。大概是这样吧
[解决办法]
用浮点浮点起实例,只有2进制能完美对应的时候才行,所以一般小数都是用字串吧...
>>> from decimal import *
>>> Decimal(1.25) # 侥幸是个2进制刚好能表示的
Decimal('1.25')
>>> Decimal(3.14) # 出差错了
Decimal('3.140000000000000124344978758017532527446746826171875')
>>> Decimal('3.14') # 小数用字串才对
Decimal('3.14')
>>> getcontext().prec = 64
>>> Decimal(1)/28
Decimal('0.03571428571428571428571428571428571428571428571428571428571428571')
>>>

读书人网 >perl python

热点推荐