2015-07-28 3 views

ответ

1

То, что вы видите, является эффектом представления с плавающей запятой и тем фактом, что int усекает дробную часть плавающего g номер точки.

Первое приводит к a*10000, оценивая число немного меньше, чем 3.

Последнее такое числа имеет значение 2 при преобразовании в int:

>>> print int(2.999999999999) 
2 

Вы можете это исправить, округляя результат точечного умножения с плавающим:

b = round(a * 10000) 
c = int(b) 

Здесь b имеет Значение 3.0 и int(b) оценивается в 3.

+0

я думаю, что это лучший способ решить мою проблему, спасибо! –

0
In [27]: a = 0.0003 
In [29]: a*10000 
Out[29]: 2.9999999999999996 
In [30]: int(a*10000) 
Out[30]: 2 
In [31]: b =a*10000 
In [32]: b 
Out[32]: 2.9999999999999996 
In [33]: print b 
3.0 
In [34]: c = int(b) 
In [35]: c 
Out[35]: 2 
In [37]: b - 3.0 
Out[37]: -4.440892098500626e-16 

Как вы можете видеть a* 100002.999....96 retursns и питон делает 2 об использовании int(b). Это ожидаемое поведение. За то, что вы хотите, я хотел бы предложить USInt floor и ceil функции в модуле math:

In [38]: import math 
In [41]: math.ceil(b) 
Out[41]: 3.0 
In [42]: math.floor(b) 
Out[42]: 2.0 
In [43]: math.floor(b-3.0) 
Out[43]: -1.0 
In [44]: math.ceil(b-3.0) 
Out[44]: -0.0