溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

php浮點數(shù)怎么用

發(fā)布時間:2021-12-01 09:34:46 來源:億速云 閱讀:121 作者:小新 欄目:編程語言

這篇文章主要介紹了php浮點數(shù)怎么用,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

php浮點數(shù)指的是Float浮點型,可以通過“$a = 1.234;$b = 1.2e3;$c = 7E-10;$d = 1_234.567;”等語法定義即可。

本文操作環(huán)境:windows7系統(tǒng)、PHP7.4版、DELL G3電腦

php Float 浮點型

浮點型(也叫浮點數(shù) float,雙精度數(shù) double 或?qū)崝?shù) real)可以用以下任一語法定義:

<?php
$a = 1.234; 
$b = 1.2e3; 
$c = 7E-10;
$d = 1_234.567; // 從 PHP 7.4.0 開始支持
?>

浮點數(shù)的形式表示(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})

浮點數(shù)的字長和平臺相關(guān),盡管通常最大值是 1.8e308 并具有 14 位十進制數(shù)字的精度(64 位 IEEE 格式)。

警告

浮點數(shù)的精度

浮點數(shù)的精度有限。盡管取決于系統(tǒng),PHP 通常使用 IEEE 754 雙精度格式,則由于取整而導(dǎo)致的最大相對誤差為 1.11e-16。非基本數(shù)學(xué)運算可能會給出更大誤差,并且要考慮到進行復(fù)合運算時的誤差傳遞。

此外,以十進制能夠精確表示的有理數(shù)如 0.1 或 0.7,無論有多少尾數(shù)都不能被內(nèi)部所使用的二進制精確表示,因此不能在不丟失一點點精度的情況下轉(zhuǎn)換為二進制的格式。這就會造成混亂的結(jié)果:例如,floor((0.1+0.7)*10) 通常會返回 7 而不是預(yù)期中的 8,因為該結(jié)果內(nèi)部的表示其實是類似 7.9999999999999991118...。

所以永遠(yuǎn)不要相信浮點數(shù)結(jié)果精確到了最后一位,也永遠(yuǎn)不要比較兩個浮點數(shù)是否相等。如果確實需要更高的精度,應(yīng)該使用任意精度數(shù)學(xué)函數(shù)或者 gmp 函數(shù)。

轉(zhuǎn)換為浮點數(shù)

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

對于其它類型的值,其情況類似于先將值轉(zhuǎn)換成 int,然后再轉(zhuǎn)換成 float。 請參閱“轉(zhuǎn)換為整型”一節(jié)以獲取更多信息。

注意:
As certain types have undefined behavior when converting to int, this is also the case when converting to float.

比較浮點數(shù)

如上述警告信息所言,由于內(nèi)部表達(dá)方式的原因,比較兩個浮點數(shù)是否相等是有問題的。不過還是有迂回的方法來比較浮點數(shù)值的。

要測試浮點數(shù)是否相等,要使用一個僅比該數(shù)值大一丁點的最小誤差值。該值也被稱為機器極小值(epsilon)或最小單元取整數(shù),是計算中所能接受的最小的差別值。

$a 和 $b 在小數(shù)點后五位精度內(nèi)都是相等的。

<?php
$a = 1.23456789;
$b = 1.23456780;
$epsilon = 0.00001;
if(abs($a-$b) < $epsilon) {
    echo "true";
}
?>

NaN

某些數(shù)學(xué)運算會產(chǎn)生一個由常量 NAN 所代表的結(jié)果。此結(jié)果代表著一個在浮點數(shù)運算中未定義或不可表述的值。任何拿此值與其它任何值(除了 true)進行的松散或嚴(yán)格比較的結(jié)果都是 false。

由于 NAN 代表著任何不同值,不應(yīng)拿 NAN 去和其它值進行比較,包括其自身,應(yīng)該用 is_nan() 來檢查。


感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“php浮點數(shù)怎么用”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI