>백엔드 개발 >PHP 튜토리얼 >php 数字相加比较大小

php 数字相加比较大小

WBOY
WBOY원래의
2016-06-06 20:14:001860검색

<code><?php $i = 0.01;
$j = 0.09;
$ss = $i + $j;
$s = 0.1;

var_dump($s);
var_dump($ss);
if($s==$ss){
echo "true";
}else{
echo "false";
}

?>

结果是
float(0.1)
float(0.1)
false

结果为什么输出false????</code>

回复内容:

<code><?php $i = 0.01;
$j = 0.09;
$ss = $i + $j;
$s = 0.1;

var_dump($s);
var_dump($ss);
if($s==$ss){
echo "true";
}else{
echo "false";
}

?>

结果是
float(0.1)
float(0.1)
false

结果为什么输出false????</code>

<code>PHP手册里有一句话:永远不要比较两个浮点数是否相等

用bccomp()比较</code>

php浮点运算是不准确的,不要纠结于这个问题,这个问题在各种语言中都存在,你输出

<code>echo number_format($ss, 30);
</code>

试一下,确实不等于0.1
手册浮点数说明

就像js的 0.1+0.2 == 0.3 //false 一样,涉及到编码
因为计算机的位数是有限的, 并不能把所有浮点数完整的表示出来,有些只能得到一个近似值, 比如:
0.01+0.09 = 0.099999999999 //js 的结果

所以, 浮点数的比较有时候保证精度就行了, 比如 $a-$b当然, 可以转换成整数的形式比较, $a100+$b100 == $c*100 这种

每种语言存储浮点数的方式不同,精确度不一样,像js,php这种弱类型的语言,特别容易失精度.如楼上所说,1没必要纠结,2,最后不比较浮点数,3.一定要比较,那就在一定范围内比较

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.