如何在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)