礼品代发网

礼品代发网

收录130107113题,礼品代发网免费搜题解答

今日已更新0道题

为什么float的范围-float为什么不能直接用==作比较

2025-11-20 05:31:37  

为什么float的范围-float为什么不能直接用==作比较

优质解答

浮点数为啥不能直接用等号比呢?因为它们在电脑里存的是二进制小数,像0.1和0.2这种十进制数,转换成二进制就会变成无限循环的0.11...和0.110011...。加起来后变成0....,和0.3的二进制0.011...不一样,所以等号两边不相等。比如用Python算0.1+0.2,结果其实是0.000004,这跟0.3差了0.000004,这个误差虽然小,但等号会直接报错。

为啥浮点数存二进制就会出问题呢?因为十进制和二进制在表示小数时完全不同。比如十进制的1/3是0.3333...,二进制里是0....这种无限循环。当用二进制存浮点数时,像0.1这种有限十进制小数,在二进制里就会变成无限循环,只能近似存储。比如0.1的二进制存储值其实是0.000000555...,而0.2是0.00000111...,加起来变成0.00000444...,和0.3的二进制存储值0.00000444...其实差了0.00000004...这个误差虽然小到可以忽略,但等号比较时,电脑会严格检查每个二进制位是否完全相同,所以就会报错。比如用C语言算0.1+0.2,结果就是0.000004,跟0.3差了0.000004,这时候用等号就会失败。

本题链接:

浮点精度二进制存储