문제

>>> 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.

도움이 되었습니까?

해결책

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.

다른 팁

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

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.

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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top