本文目錄一覽:
- 1、php里ceil函數和intval函數有什麼區別 ?
- 2、請教,php保留兩位小數,但不四捨五入
- 3、PHP怎麼實現整除
- 4、為什麼php用小數點相減不對呢
- 5、php取整的幾種方式
- 6、php中的四捨五入函數代碼(floor函數、ceil函數、round與intval)
php里ceil函數和intval函數有什麼區別 ?
ceil(x)接受一個浮點數x,返回比x大的最小整數
ceil(3.21) = 4
ceil(9.0) = 9
ceil(-2.333) = 2
intval返回一個整數,接受2個參數,第一個是數或者包含數的字符串,第二個參數是第一個參數使用的進制,除非第一個參數是字符串,否則第二個參數沒有作用,參數中如果有小數,小數部分將被截斷
inval(123.999) = 123
inval(33.123) = 33
intval(‘c’, 16) = 12
intval(1000, 2) = 8
intval(‘1000’, 2) = 8
請教,php保留兩位小數,但不四捨五入
php四捨五入函數有:floor函數、ceil函數、round與intval
使用floor函數:
$a=1.23456;
echo floor($a*100)/100;
PHP怎麼實現整除
如果我們使用』/’操作符進行除法運算時,如果遇到無法除盡的情況,會得到小數值。如果我只希望得到整數部分,怎麼辦呢?
在PHP的數學函數庫里提供了多個函數供我們選擇:
1、round函數, 對浮點數進行四捨五入。這個應該是最符合大家需要的吧。
php echo round(10/3); // 3
2、ceil函數, 進一法取整。
php echo ceil(4.3); // 5
3、floor ,捨去法取整,捨去小數部分
php echo floor(4.3); // 4 echo floor(9.999); // 9
為什麼php用小數點相減不對呢
一則浮點數計算例子如下:
代碼如下:
$a = 0.2+0.7;
$b = 0.9;
var_dump($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_dump(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取整的幾種方式
具體代碼如下:
?php
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, ”);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
echo $file_contents;
?
PHP 獨特的語法混合了C、Java、Perl以及PHP自創的語法。
它可以比CGI或者Perl更快速地執行動態網頁。用PHP做出的動態頁面與其他的編程語言相比,PHP是將程序嵌入到HTML(標準通用標記語言下的一個應用)文檔中去執行,
執行效率比完全生成HTML標記的CGI要高許多;
PHP還可以執行編譯後代碼,編譯可以達到加密和優化代碼運行,使代碼運行更快。
php中的四捨五入函數代碼(floor函數、ceil函數、round與intval)
floor函數和ceil函數互相搭配起來可以使php
處理的數據更加真實可靠。
一、先來看floor函數:
語法:
float
floor
(
float
value
)
說明:
返回不大於
value
的下一個整數,將
value
的小數部分捨去取整。floor()
返回的類型仍然是
float,因為
float
值的範圍通常比
integer
要大。
floor()
例子
1
?php
echo
floor(1.6);
//
will
output
“1”
echo
floor(-1.6);
//
will
output
“-2”
?
floor()
例子
2
?php
echo(floor(0.60));
echo(floor(0.40));
echo(floor(5));
echo(floor(5.1));
echo(floor(-5.1));
echo(floor(-5.9))
?
輸出:
5
5
-6
-6
二、ceil函數:
語法:
float
ceil
(
float
value
)
說明:
返回不小於
value
的下一個整數,value
如果有小數部分則進一位。ceil()
返回的類型仍然是
float,因為
float
值的範圍通常比
integer
要大。
ceil()
例子:
?php
echo
ceil(4.3);
//
5
echo
ceil(9.999);
//
10
echo
ceil(-3.14);
//
-3
?
看到這兩個函數的區別了么。。
在分頁時我們會常用到的
//頁碼計算:
$lastpg=ceil($totle/$displaypg);
//最後頁,也是總頁數,用ceil就方便多了。
$lastpg=$lastpg
?
$lastpg
:
1;
//沒有顯示條目,置最後頁為1
$page=min($lastpg,$page);
$prepg=$page-1;
//上一頁
$nextpg=($page==$lastpg
?
:
$page+1);
//下一頁
$firstcount=($page-1)*$displaypg;
當然,如果需要制定精度就需要使用round函數了。
三、round函數:
語法:
float
round
(
float
val
[,
int
precision]
)
說明:
返回將
val
根據指定精度
precision(十進制小數點後數字的數目)進行四捨五入的結果。precision
也可以是負數或零(默認值)。
round()
例子
?php
echo
round(3.4);
//
3
echo
round(3.5);
//
4
echo
round(3.6);
//
4
echo
round(3.6,
0);
//
4
echo
round(1.95583,
2);
//
1.96
echo
round(1241757,
-3);
//
1242000
echo
round(5.045,
2);
//
5.05
echo
round(5.055,
2);
//
5.06
?
四、intval—對變數轉成整數型態
變量轉成整數類型。
語法:
int
intval(mixed
var,
int
[base]);
返回值:
整數
函數種類:
PHP
系統功能
內容說明
本函數可將變量轉成整數類型。可省略的參數
base
是轉換的基底,默認值為
10。轉換的變量
var
可以為數組或類之外的任何類型變量。
例子intval()
?php
echo
intval(4.3);
//4
echo
intval(4.6);
//
4
?
註:intval如果是字符型的會自動轉換為0
如
intval(‘abc’);
輸出結果
如果是
intval(‘5fd’);
輸出結果是
5
原創文章,作者:UNMU,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/144047.html