您好,登錄后才能下訂單哦!
這篇文章主要介紹了php浮點數怎么用,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
php浮點數指的是Float浮點型,可以通過“$a = 1.234;$b = 1.2e3;$c = 7E-10;$d = 1_234.567;”等語法定義即可。
本文操作環境:windows7系統、PHP7.4版、DELL G3電腦
php Float 浮點型
浮點型(也叫浮點數 float,雙精度數 double 或實數 real)可以用以下任一語法定義:
<?php $a = 1.234; $b = 1.2e3; $c = 7E-10; $d = 1_234.567; // 從 PHP 7.4.0 開始支持 ?>
浮點數的形式表示(PHP 7.4.0 之前不支持下劃線):
LNUM [0-9]+(_[0-9]+)* DNUM ([0-9]*(_[0-9]+)*[\.]{LNUM}) | ({LNUM}[\.][0-9]*(_[0-9]+)*) EXPONENT_DNUM (({LNUM} | {DNUM}) [eE][+-]? {LNUM})
浮點數的字長和平臺相關,盡管通常最大值是 1.8e308 并具有 14 位十進制數字的精度(64 位 IEEE 格式)。
警告
浮點數的精度
浮點數的精度有限。盡管取決于系統,PHP 通常使用 IEEE 754 雙精度格式,則由于取整而導致的最大相對誤差為 1.11e-16。非基本數學運算可能會給出更大誤差,并且要考慮到進行復合運算時的誤差傳遞。
此外,以十進制能夠精確表示的有理數如 0.1 或 0.7,無論有多少尾數都不能被內部所使用的二進制精確表示,因此不能在不丟失一點點精度的情況下轉換為二進制的格式。這就會造成混亂的結果:例如,floor((0.1+0.7)*10) 通常會返回 7 而不是預期中的 8,因為該結果內部的表示其實是類似 7.9999999999999991118...。
所以永遠不要相信浮點數結果精確到了最后一位,也永遠不要比較兩個浮點數是否相等。如果確實需要更高的精度,應該使用任意精度數學函數或者 gmp 函數。
轉換為浮點數
From strings
If the string is numeric or leading numeric then it will resolve to the corresponding float value, otherwise it is converted to zero (0).
From other types
對于其它類型的值,其情況類似于先將值轉換成 int,然后再轉換成 float。 請參閱“轉換為整型”一節以獲取更多信息。
注意: As certain types have undefined behavior when converting to int, this is also the case when converting to float.
比較浮點數
如上述警告信息所言,由于內部表達方式的原因,比較兩個浮點數是否相等是有問題的。不過還是有迂回的方法來比較浮點數值的。
要測試浮點數是否相等,要使用一個僅比該數值大一丁點的最小誤差值。該值也被稱為機器極小值(epsilon)或最小單元取整數,是計算中所能接受的最小的差別值。
$a 和 $b 在小數點后五位精度內都是相等的。
<?php $a = 1.23456789; $b = 1.23456780; $epsilon = 0.00001; if(abs($a-$b) < $epsilon) { echo "true"; } ?>
NaN
某些數學運算會產生一個由常量 NAN 所代表的結果。此結果代表著一個在浮點數運算中未定義或不可表述的值。任何拿此值與其它任何值(除了 true)進行的松散或嚴格比較的結果都是 false。
由于 NAN 代表著任何不同值,不應拿 NAN 去和其它值進行比較,包括其自身,應該用 is_nan() 來檢查。
感謝你能夠認真閱讀完這篇文章,希望小編分享的“php浮點數怎么用”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。