2016-04-29 7 views
3

私はPythonの初心者ですので、ここで型の基本的な知識が不足していると思います。浮動小数点数を取って小数点を文字列に置き換える文字列を作成しようとしています。そうすることで、私はと等価であるコードの行呼び出してみました:Pythonは浮動小数点型の計算1.0をint()を使用してゼロに変換します

int(pow(10, 1)*(5.1%1))) 

をしかし、あなたは、このコードを実行する場合:

x = pow(10, 1)*(5.1%1) 
print(x) 
print(type(x)) 
print(int(x)) 
print(int(1.0)) 
print(type(1.0)) 

をそれが返されます。

1.0 
<type 'float'> 
0 
1 
<type 'float'> 

私がそこにあると仮定しましたここでは型の問題ですが、どちらもfloat型です。なぜint(x)はゼロを返しますが、int(1.0)は返しませんか?

答えて

2

丸め誤差に、あなたは正確に1が、少し小さい

>>> x = pow(10, 1)*(5.1%1) 
>>> print '{:.20f}'.format(x) 
0.99999999999999644729 

あなたはそれを

>>> x = pow(10, 1)*(5.1%1) 
>>> print x 
1.0 
>>> print '{:.10f}'.format(x) 
1.0000000000 
を表示するときに、あなたのためだけに切り上げ他のものの束を得ているを取得できませんでした原因

は、間違いなく(デバッグのためにわずかに良い)と同じ番号を与える何か表示を得る習慣のうち、reprを使用するには

>>> x = pow(10, 1)*(5.1%1) 
>>> print repr(x) 
0.9999999999999964 
>>> print 'hello {!r} world'.format(x) 
hello 0.9999999999999964 world 
+0

私のためにこれを明確にしていただきありがとうございます。私はそれをラウンドアップします。 – ldoiron17

関連する問題