python中整数类型的问题
从浮点型转换为整数时出现问题:python中整数类型的问题,python,Python,从浮点型转换为整数时出现问题: a=0.0003 b=a*10000 c=int(b) 这段代码返回2,但我需要3。并且b-3.0返回该值 >>> b-3.0 -4.44089209850063e-16您看到的是浮点表示的效果以及int截断浮点数的小数部分的事实 前者导致a*10000的计算值略小于3 In [27]: a = 0.0003 In [29]: a*10000 Out[29]: 2.9999999999999996 In [30]: int(a*10000)
a=0.0003
b=a*10000
c=int(b)
这段代码返回2,但我需要3。并且b-3.0
返回该值
>>> b-3.0
-4.44089209850063e-16您看到的是浮点表示的效果以及
int
截断浮点数的小数部分的事实
前者导致a*10000
的计算值略小于3
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
后一个数字在转换为int
时计算为2
:
>>> print int(2.999999999999)
2
可以通过将浮点乘法的结果四舍五入来解决此问题:
b = round(a * 10000)
c = int(b)
这里,b
的值为3.0
,int(b)
的计算结果为3
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*10000
retursns2.999….96
,python使用int(b)
使其成为2。这是预期的行为。对于您想要的内容,我建议您在math
模块中使用floor
和ceil
函数:
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
我想,这是解决我问题的最好办法,谢谢!