Python float - str - float weirdness

2019-01-03 03:20发布

>>> float(str(0.65000000000000002))

0.65000000000000002

>>> float(str(0.47000000000000003))

0.46999999999999997     ???

What is going on here? How do I convert 0.47000000000000003 to string and the resultant value back to float?

I am using Python 2.5.4 on Windows.

4条回答
We Are One
2楼-- · 2019-01-03 04:02

float (and double) do not have infinite precision. Naturally, rounding errors occur when you operate on them.

查看更多
干净又极端
3楼-- · 2019-01-03 04:02

This is a Python FAQ

The same question comes up quite regularly in comp.lang.python also.

I think reason it is a FAQ is that because python is perfect in all other respects ;-), we expect it to perform arithmetic perfectly - just like we were taught at school. However, as anyone who has done a numerical methods course will tell you, floating point numbers are a very long way from perfect.

Decimal is a good alternative and if you want more speed and more options gmpy is great too.

查看更多
Juvenile、少年°
4楼-- · 2019-01-03 04:05

by this example I think this is an error in Python when you devide

    >>> print(int(((48/5.0)-9)*5))
    2

the easy way, I solve this problem by this

    >>> print(int(round(((48/5.0)-9)*5,2)))
    3
查看更多
我只想做你的唯一
5楼-- · 2019-01-03 04:12

str(0.47000000000000003) give '0.47' and float('0.47') can be 0.46999999999999997. This is due to the way floating point number are represented (see this wikipedia article)

Note: float(repr(0.47000000000000003)) or eval(repr(0.47000000000000003)) will give you the expected result, but you should use Decimal if you need precision.

查看更多
登录 后发表回答