python中整数类型的问题

2024-04-20 07:33:31 发布

您现在位置:Python中文网/ 问答频道 /正文

从浮点类型转换为整数时遇到问题:

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

这个代码返回2,但我需要3。并且b-3.0返回

>>> b-3.0

电话-4.44089209850063e-16


Tags: 代码整数int浮点电话
2条回答
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* 10000retursns2.999....96,python使用int(b)使其成为2。这是预期的行为。我建议您在math模块中使用floorceil函数:

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

您看到的是浮点表示的效果以及int截断浮点数的小数部分的事实。你知道吗

前者导致a*10000的计算值略小于3。你知道吗

后一个这样的数字在转换为int时计算为2

>>> print int(2.999999999999)
2

您可以通过舍入浮点乘法的结果来解决此问题:

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

这里,b的值为3.0int(b)的值为3。你知道吗

相关问题 更多 >