如何在python和数学中获得相同的加法运算结果?
How to obtain same results of plus operation in python and in math?
在运行中的代码如下:
k = 0
while k <= 1:
print(k)
k += 0.1
并得到结果:
0
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
然而,预期的输出是
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
如何让python的输出结果和数学一样?
只需使用round
方法,精度为1
:
In [1217]: k = 0
...: while k<=1:
...: print(round(k,1))
...: k += 0.1
...:
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
您可以使用 format()
功能,如下所示:
k = 0
while k<=1:
print('{0:.2g}'.format(k))
k += 0.1
您的代码的替代方法是用 0 初始化变量 i 并在每个循环中递增它。然后你设置 k = 0.1 * i
从而避免累积舍入误差。
以不完全为 0.1 的步长递增(因为不能表示为定点二进制数)将不断增加您的错误。文字 0.1
被翻译成的 float
不完全是 0.1。计算正确分数的最近二进制近似值是更好的方法:
k = 0
while k <= 10:
print(k / 10)
k += 1
k / 10
将不是您想要的数字的精确表示,除了 0.0、0.5、1.0,但由于它是最接近的可用浮点数,因此它会正确打印。
顺便说一句,切换到整数可以让您更惯用地重写循环,如
for k in range(11):
print(k / 10)
在运行中的代码如下:
k = 0
while k <= 1:
print(k)
k += 0.1
并得到结果:
0
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
然而,预期的输出是
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
如何让python的输出结果和数学一样?
只需使用round
方法,精度为1
:
In [1217]: k = 0
...: while k<=1:
...: print(round(k,1))
...: k += 0.1
...:
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
您可以使用 format()
功能,如下所示:
k = 0
while k<=1:
print('{0:.2g}'.format(k))
k += 0.1
您的代码的替代方法是用 0 初始化变量 i 并在每个循环中递增它。然后你设置 k = 0.1 * i
从而避免累积舍入误差。
以不完全为 0.1 的步长递增(因为不能表示为定点二进制数)将不断增加您的错误。文字 0.1
被翻译成的 float
不完全是 0.1。计算正确分数的最近二进制近似值是更好的方法:
k = 0
while k <= 10:
print(k / 10)
k += 1
k / 10
将不是您想要的数字的精确表示,除了 0.0、0.5、1.0,但由于它是最接近的可用浮点数,因此它会正确打印。
顺便说一句,切换到整数可以让您更惯用地重写循环,如
for k in range(11):
print(k / 10)