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
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
正如您所看到的
a* 10000
retursns2.999....96
,python使用int(b)
使其成为2。这是预期的行为。我建议您在math
模块中使用floor
和ceil
函数:您看到的是浮点表示的效果以及
int
截断浮点数的小数部分的事实。你知道吗前者导致
a*10000
的计算值略小于3
。你知道吗后一个这样的数字在转换为
int
时计算为2
:您可以通过舍入浮点乘法的结果来解决此问题:
这里,
b
的值为3.0
,int(b)
的值为3
。你知道吗相关问题 更多 >
编程相关推荐