扫码关注官方订阅号
结果是 float(0.1) float(0.1) false 结果为什么输出false????
PHP手册里有一句话:永远不要比较两个浮点数是否相等 用bccomp()比较
php浮点运算是不准确的,不要纠结于这个问题,这个问题在各种语言中都存在,你输出
echo number_format($ss, 30);
试一下,确实不等于0.1手册浮点数说明
就像js的 0.1+0.2 == 0.3 //false 一样,涉及到编码 因为计算机的位数是有限的, 并不能把所有浮点数完整的表示出来,有些只能得到一个近似值, 比如:0.01+0.09 = 0.099999999999 //js 的结果
所以, 浮点数的比较有时候保证精度就行了, 比如 $a-$b<=0.000001 就表示相等当然, 可以转换成整数的形式比较, $a100+$b100 == $c*100 这种
每种语言存储浮点数的方式不同,精确度不一样,像js,php这种弱类型的语言,特别容易失精度.如楼上所说,1没必要纠结,2,最后不比较浮点数,3.一定要比较,那就在一定范围内比较
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
php浮点运算是不准确的,不要纠结于这个问题,这个问题在各种语言中都存在,你输出
试一下,确实不等于0.1
手册浮点数说明
就像js的 0.1+0.2 == 0.3 //false 一样,涉及到编码
因为计算机的位数是有限的, 并不能把所有浮点数完整的表示出来,有些只能得到一个近似值, 比如:
0.01+0.09 = 0.099999999999 //js 的结果
所以, 浮点数的比较有时候保证精度就行了, 比如 $a-$b<=0.000001 就表示相等
当然, 可以转换成整数的形式比较, $a100+$b100 == $c*100 这种
每种语言存储浮点数的方式不同,精确度不一样,像js,php这种弱类型的语言,特别容易失精度.如楼上所说,1没必要纠结,2,最后不比较浮点数,3.一定要比较,那就在一定范围内比较