问题描述
提取一个浮点数的每一位出现了精度损失。
代码:
a = 56.76
bit_1 = int(a/10)
a = a % 10
bit_2 = int(a/1)
a = a % 1
bit_3 = int(a/0.1)
a = a % 0.1
bit_4 = int(a/0.01)
print(bit_1,bit_2,bit_3,bit_4)
结果为:5 6 7 5
很奇怪,结果应该是5 6 7 6,最后一位却变成了5。
我们逐行打印结果来一探究竟
>>> a = 56.76
>>> a = a % 10
>>> a
6.759999999999998
相信看到这里大家就明白了,原来是使用浮点数导致的精度问题。
解决方案
使用round()方法发将精度较高的浮点数四舍五入为精度较低的浮点数即可。
>>> a
6.759999999999998
>>> a = round(a,2)
>>> a
6.76
每一次对a进行取模运算后,矫正一次小数位数
a = 56.76
bit_1 = int(a/10)
a = a % 10
a = round(a,2)
bit_2 = int(a/1)
a = a % 1
a = round(a,2)
bit_3 = int(a/0.1)
a = a % 0.1
a = round(a,2)
bit_4 = int(a/0.01)
print(bit_1,bit_2,bit_3,bit_4)
5 6 7 6
#得到正确结果
如果确实需要超过17位的精度,可以使用decimal模块配合getcontext方法。
版权声明:本文为CSDN博主「书亚shua」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40680263/article/details/99312833