Heim > Backend-Entwicklung > PHP-Problem > Gründe für PHP-Gleitkommaberechnungsfehler

Gründe für PHP-Gleitkommaberechnungsfehler

(*-*)浩
Freigeben: 2023-02-26 20:00:02
Original
2655 Leute haben es durchsucht

Gründe für PHP-Gleitkommaberechnungsfehler

Beispiel: (Empfohlenes Lernen: PHP-Video-Tutorial)

echo intval(0.58*100);//结果为57
echo intval((0.1 + 0.7) * 10);//结果为7
Nach dem Login kopieren

Der Grund dafür ist der Computer Einige Gleitkommazahlen können intern nicht genau binär dargestellt werden, genauso wie wir 10/3 nicht genau dezimal darstellen können

Die interne Darstellung von Gleitkommazahlen im Computer: IEEE 754. Wenn Sie es nicht verstehen, schlagen Sie es selbst nach. Weitere Informationen

können Sie auch in diesem Artikel von Bird Brother lesen: http://www.laruence.com/2013/03/26/2884.html

<?php
echo intval(0.58*100);//57,注意啦
echo &#39;<br/>&#39;;
echo intval(bcmul(0.58, 100));//58
echo &#39;<br/>&#39;;
echo floor(strval(0.58*100));//58
echo &#39;<br/>&#39;;
echo (int)(0.58 * 1000/10);//58
echo &#39;<br/>&#39;;
echo intval((0.1 + 0.7) * 10);//7,注意啦
echo &#39;<br/>&#39;;
echo intval(bcadd("0.1", "0.7",1) * 10);  //8
?>
Nach dem Login kopieren

Sehen Sie sich ein anderes Beispiel an

<?php
if((0.1 + 0.7) == 0.8){
	echo &#39;相等&#39;; 
}else{
	echo &#39;不相等&#39;; //这里输出
}
echo &#39;<br />&#39;;
$a = 0.1 + 0.7;
echo $a; //0.8
echo &#39;<br/>&#39;;
if($a == 0.8){ 
	echo &#39;一天一小步&#39;;
}else{
	echo &#39;一年一大步&#39;; //这里输出
}
echo &#39;<br/>&#39;;
if(strval($a) == 0.8){
	echo &#39;一天一小步&#39;; //这里输出
}else{
	echo &#39;一年一大步&#39;; 
}
echo &#39;<br/>&#39;;
if(bcadd(0.1, 0.7,1) == 0.8){
	echo &#39;一天一小步&#39;; //这里输出
}else{
	echo &#39;一年一大步&#39;;
}
/*
结果:
不相等
0.8
一年一大步
一天一小步
一天一小步
*/
?>
Nach dem Login kopieren

$a = 0,00...00(n 0s)1 + 0,7; Wenn strval zum Wert von $a verwendet wird, ist die Anzahl der n 0s unterschiedlich, Daraus ergibt sich, ob $a und 0,8 gleich sind. Die Ergebnisse sind unterschiedlich.

Die bcadd-Funktion fügt zwei Zahlen hinzu, je nachdem, wie viele Dezimalstellen Sie behalten und die folgenden Dezimalstellen verwerfen möchten.

Sehen Sie sich an ein Divisionsbeispiel:

<?php
echo 160500643816367088/10;//1.6050064381637E+16
echo &#39;<br/>&#39;;
echo intval(160500643816367088/10);//16050064381636710
echo &#39;<br/>&#39;;
echo bcdiv(160500643816367088,10);//16050064381636708
?>
Nach dem Login kopieren

Für sensible Daten wie Gleitkommazahlen zur Berechnung von Beträgen wird daher empfohlen, die BC-Funktion von PHP

zu verwenden

Das obige ist der detaillierte Inhalt vonGründe für PHP-Gleitkommaberechnungsfehler. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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