Home >Backend Development >PHP Tutorial >php 数字相加比较大小

php 数字相加比较大小

WBOY
WBOYOriginal
2016-06-06 20:14:001860browse

<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.一定要比较,那就在一定范围内比较

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn