我尝试使用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
谢谢你的时间。
答案 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