浮点数的原因
1 问题来源
在编写代码的过程中遇到了一个让我记忆尤深的问题,举例:
for i in range(0, 8):
if -1*3.9+ i*( 3.9/7 ) == 0:
print( -1*3.9+ i*( 3.9/7 ) )
else:
print(f'No{i+1} No answer')
没有输出任何结果:
2 为什么会这样?
2.1 分解公式
令i=7
:
会发现-1*3.9+ i*( 3.9/7 )
竟然不等于0
, i*( 3.9/7 )
也不等于3.9,这时就不由得让我想到浮点数的问题,计算机语言有固定位数的浮点数
在python中浮点数计算是不精确的的,这是因为小数以二进制形式表示时的
有穷性
导致的,计算机进行浮点运算时的浮点误差
因此可能是这个原因,导致3.9/7
得到的是一个有限位数的浮点数,并不能完全等于3.9/7
,之后乘以7自然也就不是3.9了。
2.2 先乘再除≠先除再乘
3 结语
如果你也遇到类似的判断问题,请留意!
为了得到我想要的判断结果,因此我选择先乘再除,修改代码如下:
for i in range(0, 8):
if -1*3.9+ i* 3.9/7 == 0:
print( -1*3.9+ i* 3.9/7 )
else:
print(f'No{i+1} No answer')