n=0.001
while(1):
print(n)
n=n+0.001
if n>0.01:
break
输出结果:
0.001
0.002
0.003
0.004
0.005
0.006
0.007
0.008
0.009000000000000001
很好奇为什么0.009会变成0.00900..00001?****
n=0.001
while(1):
print(n)
n=n+0.001
if n>0.01:
break
输出结果:
0.001
0.002
0.003
0.004
0.005
0.006
0.007
0.008
0.009000000000000001
很好奇为什么0.009会变成0.00900..00001?****
因为 Python 中使用双精度浮点数来存储小数。在 Python 使用的 IEEE 754 标准(52M/11E/1S)中,8字节64位存储空间分配了52位来存储浮点数的有效数字,11位存储指数,1位存储正负号,即这是一种二进制版的科学计数法格式。虽然52位有效数字看起来很多,但麻烦之处在于,二进制小数在表示有理数时极易遇到无限循环的问题。其中很多在十进制小数中是有限的,比如十进制的 1/10,在十进制中可以简单写为 0.1 ,但在二进制中,他得写成:0.0001100110011001100110011001100110011001100110011001…..(后面全是 1001 循环)。因为浮点数只有52位有效数字,从第53位开始,就舍入了。这样就造成了”浮点数精度损失“问题。 舍入(round)的规则为“0 舍 1 入”,所以有时候会稍大一点有时候会稍小一点。
改成这样就可以了
n=0.001
while(1):
print(round(n,6))
n=n+0.001
if n>0.01:
break
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!