检查小数点python

时间:2016-09-02 21:33:11

标签: python

我尝试使用while创建一个计数为3(步长0.1)的脚本,并且我试图使其不显示.0表示没有十进制数的数字(1.0应显示为1,2.0应该是2 ...) 我试图做的是将float转换为int,然后检查它们是否相等。问题是它只适用于第一个数字(0)但是当它达到1.0和2.0时它不起作用。

这是我的代码:

i = 0
while i < 3.1:
    if int(i) == i:
        print int(i)
    else:
        print i
    i = i + 0.1

我得到的输出:

0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
2.0
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
3.0

我应该得到的输出:

0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
2
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
3
谢谢你的时间。

2 个答案:

答案 0 :(得分:3)

由于浮点数不精确,它们不具有精确的积分表示。因此,您需要确保差异小于某个小epsilon

epsilon = 1e-10
i = 0
while i < 3.1:
    if abs(round(i) - i) < epsilon:
        print round(i)
    else:
        print i
    i = i + 0.1

答案 1 :(得分:2)

您可以使用“{0:g}”。格式(1.00)删除尾随零。

i = 0
while i < 3.1:
    if int(i) == i:
        print int(i)
    else:
        print '{0:g}'.format(i)
    i = i + 0.1

请参阅:https://docs.python.org/3/library/string.html#format-specification-mini-language

更新:复制/粘贴时太懒了。谢谢@ aganders3

i = 0
while i < 3.1:
    print '{0:g}'.format(i)
    i = i + 0.1