计算机中浮点数在十进制和二进制转换过程中经常会出现误差,例如:
5.02 ÷ 0.1 = 50.199999999999996
5.06 * 2.09 = 10.575399999999998
想避免这种结果的出现,对于乘法运算,可以采用下述处理方法:
a = input()
b = input()
print(float(a) * float(b))
c = 0
if '.' in a:
c = c + len(a[a.index('.'):]) -1
if '.' in b:
c = c + len(b[b.index('.'):]) -1
result = float(a) * float(b)
print(round(result, c))
输入
79.03
51.0006
输出
4035.2718000000004
4035.2718
先计算两个浮点数中小数的位数,乘法运算结果中小数位数最多不超过两个参与运算的数中小数位数的和,用c做round()函数的第二个参数,可以限制结果的小数位数最多不超过参与计算的两个数中小数位的和,且round()函数处理结果会保留浮点数的最短表示,也就是会丢弃小数点后末尾的0,这样就可以得到和数学上的运算一致的结果了。
对于除法,可以采用下述处理方法:
a = input()
b = input()
print(float(a) / float(b))
n = 0
if '.' in a + b:
n = max(len(a[a.index('.'):]), len(b[b.index('.'):]))
result = int((float(a) * 10 ** n))/ int((float(b) * 10 ** n))
print(result)
先获得参与计算的两个浮点数中小数位数最多的数的小数位数,然后把两个数同时放大转为整数,再进行除法运算
输入
5.02
0.1
输出
50.199999999999996
50.2