php學習本筆記(六)

2021-06-27 02:58:46 字數 1611 閱讀 9965

浮點數是有小數點或

指數形式的數字。

<?php 

$x = 10.365;

var_dump($x);

echo "

"; $x = 2.4e3;

var_dump($x);

echo "

"; $x = 8e-5;

var_dump($x);

?>

執行結果:

float(10.365) 

float(2400) 

float(8.0e-5)

浮點數的精度有限。儘管取決於系統,php 通常使用 ieee 754 雙精度格式,則由於取整而導致的最大相對誤差為 1.11e-16。非基本數**算可能會給出更大誤差,並且要考慮到進行復合運算時的誤差傳遞。

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

所以永遠不要相信浮點數結果精確到了最後一位,也永遠不要比較兩個浮點數是否相等。如果確實需要更高的精度,應該使用任意精度數學函式或者 gmp 函式。

如上所言,由於內部表達方式的原因,比較兩個浮點數是否相等是有問題的。不過還是有迂迴的方法來比較浮點數值的。

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

<?php

$a = 1.23456789;

$b = 1.23456780;

$epsilon = 0.00001;

if(abs($a-$b) < $epsilon)

?>

$a 和

$b 在小數點後五位精度內都是相等的。

某些數**算會產生乙個由常量nan所代表的結果。此結果代表著乙個在浮點數運算中未定義或不可表述的值。任何拿此值與其它任何值進行的鬆散或嚴格比較的結果都是false

由於nan代表著任何不同值,不應拿nan去和其它值進行比較,包括其自身,應該用 is_nan()

來檢查。

例項:字串轉換為float

//convert locale string into float number 

<?php

function str2num($str)

else

return (float)$str;

} str2num('25,01');

str2num('2.5,01');

str2num('25.01');

str2num('2,5.01');

?>

PHP學習筆記(六)

array multisort 該函式可以用來排序多維陣列或一次排序多個陣列,對陣列中每乙個子陣列的第乙個元素按照常規公升序進行排序,可以使用sort asc或sort desc 指定公升序降序。示例如下 products array array tir tires 100 array otl oi...

PHP學習之路(六)

2017.08.23 24 day 6 週三 周四 晴 颱風 陣列就是乙個鍵值對組成的語言結構,鍵類似於酒店的房間號,值類似於酒店房間裡儲存的東西。如果你去某個酒店住店,服務員會告訴你房間號是多少,具體房間裡有儲存了什麼,那就需要根據房間號進到房間裡才知道了。下面的圖能更清晰的說明啥是陣列。知道陣列...

php學習筆記 第六節 迴圈

這幾天村里跟電信的鬧了點矛盾,導致快一周了沒網,超級鬱悶。不管是村里的問題還是電信的問題,最終受害的只有普通的民眾,民眾永遠都是犧牲品,無奈。言歸正傳,繼續php學習。php中的迴圈有以下幾種 用法和其他語言沒什麼兩樣,不再累贅。下面簡單的列一下 foreach 的用法foreach 語句用於迴圈遍...