❶ php中3個小數的計算,如134.7-52.5 - 82.2,為什麼結果不是0而是一個奇怪的科學計數法
樓上的回答很詳細了,而且,這不僅僅是php的問題,你在js里console.log(134.7-52.5 - 82.2)
也得不到0的,
❷ php中比較兩個數大小的內置函數是什麼
函數描述:mixed max(mixed arg1, mixed arg2, …,mixed argn);
返回值:返回此數組中的最大值,若參數中有浮點數,則所有參數轉化成浮點數,
返回值也為浮點數;否則所有參數轉化成整數,返回值為整數。
函數描述:mixed min(mixed arg1, mixed arg2, …,mixed argn);
返回值:返回此數組中的最小值,若參數中有浮點數,則所有參數轉化成浮點數,
返回值也為浮點數;否則所有參數轉化成整數,返回值為整數。
❸ 為什麼php用小數點相減不對呢
一則浮點數計算例子如下:
代碼如下:
$a = 0.2+0.7;
$b = 0.9;
var_mp($a == $b);
列印出的結果是:bool(false)。也就是說在這里 0.2+0.7 的計算結果與 0.9 並不相等,這顯然是有違我們的常識的。
對此問題,PHP官方手冊曾又說明:顯然簡單的十進制分數如 0.2 不能在不丟失一點點精度的情況下轉換為內部二進制的格式。這和一個事實有關,那就是不可能精確的用有限位數表達某些十進制分數。例如,十進制的 1/3 變成了 0.3333333...。
我們將上面的變數用雙精度格式列印出來:
代碼如下:
$a = 0.2+0.7;
$b = 0.9;
printf("%0.20f", $a);
echo '<br />';
printf("%0.20f", $b);
輸出結果如下:
代碼如下:
0.89999999999999991118
0.90000000000000002220
顯然在這里,實際上作為浮點型數據,其精度已經損失了一部分,達不到完全精確。所以永遠不要相信浮點數結果精確到了最後一位,也永遠不要比較兩個浮點數是否相等。需要說明的是,這不是PHP的問題,而是計算機內部處理浮點數的問題!在 C、JAVA 等語言中也會遇到同樣的問題。
所以要比較兩個浮點數,需要將其控制在我們需要的精度范圍內再行比較,因此使用 bcadd() 函數來對浮點數想加並進行精度轉換(為字元串):
代碼如下:
var_mp(bcadd(0.2,0.7,1) == 0.9); // 輸出:bool(true)
浮點數取整
在《PHP 取整函數 ceil 與 floor》一文中,曾有例子:
代碼如下:
<?php
echo ceil(2.1/0.7); // 輸出:4
?>
經過上面對浮點數計算的探討,知道這是浮點數計算結果不完全精確造成的:
代碼如下:
<?php
printf("%0.20f", (2.1/0.7)); // 輸出:3.00000000000000044409
?>
經過上面對浮點數計算的探討,知道這是浮點數計算結果不完全精確造成的,因此使用 round() 函數處理一下即可:
代碼如下:
<?php
echo ceil( round((2.1/0.7),1) );
?>
雖然 round() 函數是按照指定的精度進行四捨五入,但保留小數點後一位,對我們的取整結果是沒影響的。
❹ PHP編寫一個比較兩個數大小的函數compare($x,$y)......
<?php
/**
*@param$x
*@param$y
*@returnint
*/
functioncompare($x,$y){
if($x>$y){
return$x;
}elseif($x==$y){
return"相等";
}else{
return$y;
}
}
echocompare(5,5);
以上為php代碼
❺ 關於PHP小數判斷是否相等問題
if($i - $j<= 0.000001 && $i - $j >= -0.000001) {
echo '11111111';
}else{
echo '00000000';
}
❻ PHP判斷多個數字(含小數)大小,並取出最小值,程序效率高的追加50分!
function tomax($str)
{
if ($str=="")
return "字元串不能為空"; //返回err1,表示str為空
else {
$arr=explode("/",$str); //以"/"字元分割字元串
$max=$arr[0]; //記錄最新數變數
for($i=0;$i<count($arr);$i++)
{
if($arr[$i]=="")
; //假如為空字元,空語句
else {
if($max!="")
{
if($arr[$i]<$max) //比較數組的值
$max=$arr[$i];
}
else
$max=$arr[$i];
}
}
if($max=="")
return "無法比較"; //當全為空字元的返回值
else
return $max;
}
}
❼ 在php語言中,兩個浮點數float怎樣比較大小
浮點數判斷需要注意,float 和double 的精度范圍,超過范圍的數字會被忽略
(1) 浮點數大小判斷
如果沒有等號關系在裡面,也就必然一大一小,那麼直接用 > 或者 <
(2) 浮點數相等判斷
因為 浮點數在內存中存放,可能無法精確的儲存,所以同一個值,可能有不同的內存數據,所以要使用以下的方法:
以float 為例,32位APP中精度為 6-7,所以取 1e-7。
兩個數字 A 、 B,
if ( |A-B| <1e-7 ) 則 A、B相等。
❽ PHP-bc函數及其應用詳解
bcadd —— 兩個任意精度數字的加法計算 (PHP 4, PHP 5, PHP 7, PHP 8)
bcadd ( string $num1 , string $num2 , ?int $scale = null ): string
註:對 num1 和 num2 求和。
參數:
num1 — 左操作數,字元串類型。
num2 — 右操作數,字元串類型。
scale — 此可選參數用於設置結果中小數點後的小數位數。也可通過使用 bcscale() 來設置全局默認的小數位數,用於所有函數。如果未設置,則默認為 0。 現在 scale 可以為 null。
返回值: 以字元串返回兩個操作數求和之後的結果。
範例:
bcsub —— 兩個任意精度數字的減法 (PHP 4, PHP 5, PHP 7, PHP 8)
bcsub ( string $num1 , string $num2 , ?int $scale = null ): string
註: num1 減去 num2 。
參數:
num1 — 左操作數,字元串類型。
num2 — 右操作數,字元串類型。
scale — 此可選參數用於設置結果中小數點後的小數位數。也可通過使用 bcscale() 來設置全局默認的小數位數,用於所有函數。如果未設置,則默認為 0。 現在 scale 可以為 null。
返回值: 以 string 類型返回減法之後的結果。
範例:
bcmul —— 兩個任意精度數字乘法計算 (PHP 4, PHP 5, PHP 7, PHP 8)
bcmul ( string $num1 , string $num2 , ?int $scale = null ): string
註: num1 乘以 num2 。
參數:
num1 — 左操作數,字元串類型。
num2 — 右操作數,字元串類型。
scale — 此可選參數用於設置結果中小數點後的小數位數。也可通過使用 bcscale() 來設置全局默認的小數位數,用於所有函數。如果未設置,則默認為 0。 現在 scale 可以為 null。
返回值: 以 string 類型返回減法之後的結果。
範例:
bcp —— 兩個任意精度的數字除法計算 (PHP 4, PHP 5, PHP 7, PHP 8)
bcp ( string $num1 , string $num2 , ?int $scale = null ): string
註: num1 除以 num2 。
參數:
num1 — 左操作數,字元串類型。
num2 — 右操作數,字元串類型。
scale — 此可選參數用於設置結果中小數點後的小數位數。也可通過使用 bcscale() 來設置全局默認的小數位數,用於所有函數。如果未設置,則默認為 0。 現在 scale 可以為 null。
返回值: 以 string 類型返回減法之後的結果。
範例:
bccomp —— 比較兩個任意精度的數字 (PHP 4, PHP 5, PHP 7, PHP 8)
bccomp ( string $num1 , string $num2 , ?int $scale = null ): int
註: 比較 num1 和 num2 , 並且返回整型數字的結果。
參數:
num1 — 左邊的運算數,是一個字元串。
num2 — 右邊的運算數,是一個字元串。
scale — 可選的 scale 參數被用作設置指示數字, 在使用來作比較的小數點部分。
返回值: 兩個數相等時返回 0; num1 比 num2 小時返回 -1; 其他則返回 1。現在 scale 可以為 null。
範例:
bcmod —— 任意精度數字取模 (PHP 4, PHP 5, PHP 7, PHP 8)
bcmod ( string $num1 , string $num2 , ?int $scale = null ): string
註: 對 num1 使用 num2 取模。 除非 num2 是零,否則結果必定和 num1 有相同的符號。
參數:
num1 — string 類型的被除數。
num2 — string 類型的除數。
scale — 現在 scale 可以為 null。
返回值: 返回字元串類型取模後的結果,如果 num2 為 0 則返回 null。
範例:
bcpow—— 任意精度數字的乘方 (PHP 4, PHP 5, PHP 7, PHP 8)
bcpow ( string $num , string $exponent , ?int $scale = null ): string
註: num 的 exponent 次方運算。
參數:
num — string 類型的底數。
exponent — string 類型的指數。 如果指數不是整數,將被截斷。 指數的有效范圍取決於平台,但起碼支持 -2147483648 到 2147483647 的范圍。
scale — 此可選參數用於設置結果中小數點後的小數位數。也可通過使用 bcscale() 來設置全局默認的小數位數,用於所有函數。如果未設置,則默認為 0。
返回值: 返回字元串類型的結果。
範例:
bcpowmod —— 先取次方然後 取模 。 (PHP 5, PHP 7, PHP 8)
bcpowmod ( string $num , string $exponent , string $molus , ?int $scale = null ): string
註: 先取次方然後取模。
參數:
base — 左操作數。它是一個字元串類型的參數。
exponent — string 類型的指數。 指數的正確操作數。
molus — string 類型的 參 數。 接受表示模數的操作數。
scale — 一個整數類型參數。它說明 ( base exponent %mod ) 結果中小數點後的位數。其默認值為 0。
返回值: 該函數將結果作為字元串返回。或者,如果模數為 0 或指數為負,則返回 False。
範例:
bcscale —— 設置/獲取所有 bc math 函數的默認小數點保留位數 (PHP 4, PHP 5, PHP 7, PHP 8)
bcscale ( int $scale ): int
設置所有 bc math 函數在未設定情況下的小數點保留位數。
bcscale ( null $scale = null ): int
註: 獲取當前的小數點保留位數。
參數:
scale — 小數點保留位數。
返回值: 設置的時候,返回之前的小數點保留位數。否則就是返回當前的位數。
範例:
bcsqrt —— 任意精度數字的二次方根 (PHP 4, PHP 5, PHP 7, PHP 8)
bcsqrt ( string $num , ?int $scale = null ): string
註: 返回 num 的二次方根。
參數:
num — string 類型的操作數 。
scale — 此可選參數用於設置結果中小數點後的小數位數。也可通過使用 bcscale() 來設置全局默認的小數位數,用於所有函數。如果未設置,則默認為 0。
返回值: 以 string 類型返回二次方根的結果,如果 num 是負數則返回 null。
範例:
❾ php只有時分秒怎麼比較大小
2015-04-22 這樣的時間格式在php中是屬於字元串的,字元串是不能比較大小的。
你用strtotime(時間) 這個函數將你的時間轉化為時間戳,也就是一串數字這樣就可以比較了