Python-其他-round()保留小数位时遇到的问题

最近有一个需求,原有整数计算,改成小数计算,保留一位小数。
于是按照需求,将数据结构由 int 改为 float ,计算时采用round()方法来保留小数位。

第一版代码如下:

a = 0.1000001
b = round(a+0.1,1)
c = 0
c += round(a,1)

修改完成后进行测试,多次测试过程中发现,b 结果正确,但 c 明明已经使用了round(a,1)保留一位小数,但最后的结果会出现 0.30000000000000004 这样的结果。

实际上 c += round(a,1) 是等同于 c = c + round(a,1),这样在多次计算之后,c 因为加上了 float 类型,从 int 变成了 float,而我们知道,在计算机中,浮点型的精度是有限的,它无法准确的表示,只能用一个近似值代替,而当使用这些近似值代替的浮点数进行运算时,本质上是这些近似值参与运算,出来的结果也就是近似结果。

所以最终代码应该为:

a = 0.1000001
b = round(a + 0.1, 1)
c = 0
c = round(c + a, 1)

你可能感兴趣的:(python,后端)