Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中整数类型的问题_Python - Fatal编程技术网

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
retursns
2.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

我想,这是解决我问题的最好办法,谢谢!