php 数字相加比较大小

WBOY
Freigeben: 2016-06-06 20:14:00
Original
1848 Leute haben es durchsucht

<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>
Nach dem Login kopieren
Nach dem Login kopieren

回复内容:

<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>
Nach dem Login kopieren
Nach dem Login kopieren

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

用bccomp()比较</code>
Nach dem Login kopieren

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

<code>echo number_format($ss, 30);
</code>
Nach dem Login kopieren

试一下,确实不等于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.一定要比较,那就在一定范围内比较

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage