2013-03-07 5 views

답변

5

부동 소수점 숫자가 정확하지 않습니다. 인쇄 할 때는 1e-4으로 표시하거나 Decimal을 사용하여 정확한 값을 얻을 수 있습니다. 예 :

>>> print '{:4.0e}'.format(100*0.000001) 
1e-04 

또는

>>> Decimal(100)*Decimal('0.000001') 
Decimal('0.000100') 
+3

을 그리고 1E-05 9.9999999999e-05 .. –

+0

실제로는 10 배, 그들은 정확한 있습니다. 부동 소수점 연산이 표준 연산이 아니라는 것입니다. 그냥 뉘앙스. – freakish

+0

@freakish - '0.000001'을 쓸 때 리터럴이'0.00000100000000000000000000000001'과 다르다는 보장은 없습니다. 그래서 저는 그것들이 * 정확하지 않다고 주장 할 것입니다. 그러나 나는 당신이 그것을 어떻게보고 있는지에 달려 있다고 생각합니다. – mgilson

0

곱셈을 수행하지 마십시오

>>> 100e-7 
1e-05 

실현하지만 당신이 너무 오래 전에 근사치에게 다른 유물을 발견 할 것입니다 0.1 is an infinitely repeating number in binary 그 :

>>> 100e-7*.1 
1.0000000000000002e-06 

그럼 그냥 출력 포맷하기에 문제를 다루는 :

>>> '{:e}'.format(100*0.000001) 
'1.000000e-04' 
>>> '{:e}'.format(100*0.0000001) 
'1.000000e-05' 
>>> '{:e}'.format(100*0.00000001) 
'1.000000e-06' 
관련 문제