----- 最后更新【2021-5-28】-----
一昆淡、語(yǔ)法
1舅逸、簡(jiǎn)介
在PHP中,數(shù)字被分為兩種類型:整數(shù)寸潦、浮點(diǎn)數(shù)色鸳。
2、類型的轉(zhuǎn)換
1)轉(zhuǎn)換為整形
方法一:使用(int)
或(integer)
轉(zhuǎn)換成整形
方法二:使用intval($var)
把 $var 轉(zhuǎn)換成整形
方法三:使用settype($var, "integer")
见转,第二個(gè)參數(shù)也可以設(shè)成int
缕碎。
$num = 3.14;
$num1 = (int) $num;
var_dump($num1); //輸出int(3)
var_dump($num); //輸出float(3.14)
2)轉(zhuǎn)換為浮點(diǎn)形
方法一:使用(float)
、(double)
或(real)
轉(zhuǎn)換成浮點(diǎn)形
方法二:使用floatval($var)
把 $var 轉(zhuǎn)換成浮點(diǎn)形
方法三:使用settype($var, "float")
池户,對(duì)于舊版本中使用的double
現(xiàn)已停用。
$num = '3.14ab';
$num1 = (float) $num;
var_dump($num1); //輸出float(3.14)
var_dump(floatval($num)); //輸出float(3.14)
3)轉(zhuǎn)換進(jìn)制
base_convert — 在任意進(jìn)制之間轉(zhuǎn)換數(shù)字
string base_convert ( string $number , int $frombase , int $tobase )
返回一字符串凡怎,包含 number 以 tobase 進(jìn)制的表示校焦。number 本身的進(jìn)制由 frombase 指定。frombase 和 tobase 都只能在 2 和 36 之間(包括 2 和 36)统倒。高于十進(jìn)制的數(shù)字用字母 a-z 表示寨典,例如 a 表示 10,b 表示 11 以及 z 表示 35房匆。
相關(guān)函數(shù):
bindec
— 二進(jìn)制轉(zhuǎn)換為十進(jìn)制
decbin
— 十進(jìn)制轉(zhuǎn)換為二進(jìn)制
octdec
— 八進(jìn)制轉(zhuǎn)換為十進(jìn)制
decoct
— 十進(jìn)制轉(zhuǎn)換為八進(jìn)制
hexdec
— 十六進(jìn)制轉(zhuǎn)換為十進(jìn)制
dechex
— 十進(jìn)制轉(zhuǎn)換為十六進(jìn)制
hex2bin
— 轉(zhuǎn)換十六進(jìn)制字符串為二進(jìn)制字符串
bin2hex
— 二進(jìn)制字符串轉(zhuǎn)換為十六進(jìn)制值
二耸成、Integer 整型
整型值可以使用十進(jìn)制报亩,十六進(jìn)制,八進(jìn)制或二進(jìn)制(PHP 5.4.0 起可用)表示井氢,前面可以加上可選的符號(hào)(- 或者 +)弦追。
要使用八進(jìn)制表達(dá),數(shù)字前必須加上 0(零)花竞。要使用十六進(jìn)制表達(dá)劲件,數(shù)字前必須加上 0x。要使用二進(jìn)制表達(dá)约急,數(shù)字前必須加上 0b零远。
$a = 0x11; //十六進(jìn)制
$b = 0b11; //二進(jìn)制
$c = 011; //八進(jìn)制
var_dump($a);
var_dump($b);
var_dump($c);
輸出結(jié)果為(十進(jìn)制):
int(17) int(3) int(9)
三、Float 浮點(diǎn)型
浮點(diǎn)型(也叫浮點(diǎn)數(shù) float厌蔽,雙精度數(shù) double 或?qū)崝?shù) real)可以用以下任一語(yǔ)法定義:
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
var_dump($a);
var_dump($b);
var_dump($c);
輸出結(jié)果為:
float(1.234) float(1200) float(7.0E-10)
注意:
永遠(yuǎn)不要相信浮點(diǎn)數(shù)結(jié)果精確到了最后一位牵辣,也永遠(yuǎn)不要比較兩個(gè)浮點(diǎn)數(shù)是否相等。例如奴饮,floor((0.1+0.7)*10) 通常會(huì)返回 7 而不是預(yù)期中的 8纬向,因?yàn)樵摻Y(jié)果內(nèi)部的表示其實(shí)是類似 7.9999999999999991118...。
$a = 0.1;
$b = 0.7
if($a +$b == 0.8) {
//判斷結(jié)果為false,不會(huì)進(jìn)來(lái)這里拐云。
}
四罢猪、常用方法
1、數(shù)字類型的判斷
1)is_numeric—檢測(cè)變量是否為數(shù)字或數(shù)字字符串
bool is_numeric ( mixed $var)
檢測(cè)變量是否為數(shù)字或數(shù)字字符串叉瘩,如果var是數(shù)字和數(shù)字字符串則返回TRUE膳帕,否則返回FALSE。
注意還要考慮科學(xué)記數(shù)法和十六進(jìn)制數(shù)薇缅。
$num = '22e33'; //true
$num = 0xA3; //true
$num = '0xA3'; //false
$num = '5,112'; //false
2)用正則式判斷是否是整數(shù)
preg_match("/^[0-9]*$/", $var);
該規(guī)則為純數(shù)字判斷危彩。
3)is_int - 檢測(cè)變量是否是整數(shù)
bool is_int ( mixed $var )
is_integer
— is_int() 的別名
is_long
— is_int() 的別名
$num = '5'; //false
$num = 5; //true
$num = 5.0; //false
4)is_float—檢測(cè)變量是否是浮點(diǎn)型
bool is_float ( mixed $var )
is_double
— is_float() 的別名
is_real
— is_float() 的別名
$num = 5.0; //true
$num = '5.0'; //false
2、小數(shù)與整數(shù)的舍取
1)round—對(duì)浮點(diǎn)數(shù)進(jìn)行四舍五入
float round ( float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]] )
返回將val根據(jù)指定精度precision(十進(jìn)制小數(shù)點(diǎn)后數(shù)字的數(shù)目)進(jìn)行四舍五入的結(jié)果泳桦。precision也可以是負(fù)數(shù)或零(默認(rèn)值)汤徽。
echo round(3.4); // 3
echo round(3.5); // 4
echo round(1.95583, 2); // 1.96
echo round(1241757, -3); // 1242000
如傳入第三個(gè)參數(shù)mode值為以下之一(剛好需要舍取的下一位數(shù)剛好為5的情況): PHP_ROUND_HALF_UP
(向上舍取)灸撰、PHP_ROUND_HALF_DOWN
(向下舍融烁)、PHP_ROUND_HALF_EVEN
(取最近的偶數(shù))或PHP_ROUND_HALF_ODD
(取最近的奇數(shù))
2)ceil—進(jìn)一法取整
float ceil ( float $value )
返回不小于 value 的下一個(gè)整數(shù)浮毯。 ceil() 返回的類型仍然是 float完疫,因?yàn)?float 值的范圍通常比 integer 要大
echo ceil(4.3); // 5
echo ceil(9.999); // 10
echo ceil(-3.14); // -3
3)floor—舍去法取整
float floor ( float $value )
返回不大于 value 的最接近的整數(shù),將 value 的小數(shù)部分舍去取整债蓝。floor() 返回的類型仍然是 float壳鹤,因?yàn)?float 值的范圍通常比 integer 要大。
echo floor(4.3); // 4
echo floor(9.999); // 9
echo floor(-3.14); // -4
4)abs—絕對(duì)值
number abs ( mixed $number )
number 的絕對(duì)值饰迹。 如果參數(shù) number 是 float芳誓,則返回的類型也是 float余舶,否則返回 integer(因?yàn)?float 通常比 integer 有更大的取值范圍)。
$abs = abs(-4.2); // $abs = 4.2; (double/float)
$abs2 = abs(5); // $abs2 = 5; (integer)
$abs3 = abs(-5); // $abs3 = 5; (integer)
3锹淌、數(shù)字的自動(dòng)生成
1)range — 根據(jù)范圍創(chuàng)建數(shù)組匿值,包含指定的元素
array range ( mixed $start , mixed $end [, number $step = 1 ] )
建立一個(gè)包含指定范圍單元的數(shù)組。
range(3,7,2);
//返回結(jié)果如下:
array(3) {
[0]=>
int(3)
[1]=>
int(5)
[2]=>
int(7)
}
2)rand — 產(chǎn)生一個(gè)隨機(jī)整數(shù)
int rand ( void )
int rand ( int $min , int $max )
如果沒(méi)有提供可選參數(shù) min 和 max葛圃,rand() 返回 0 到 getrandmax() 之間的偽隨機(jī)整數(shù)千扔。
3)mt_rand — 生成更好的隨機(jī)數(shù)
int mt_rand ( void )
int mt_rand ( int $min , int $max )
很多老的 libc 的隨機(jī)數(shù)發(fā)生器具有一些不確定和未知的特性而且很慢。PHP 的rand()
函數(shù)默認(rèn)使用 libc 隨機(jī)數(shù)發(fā)生器库正。mt_rand()
函數(shù)是非正式用來(lái)替換它的曲楚。該函數(shù)用了 ? Mersenne Twister中已知的特性作為隨機(jī)數(shù)發(fā)生器,它可以產(chǎn)生隨機(jī)數(shù)值的平均速度比 libc 提供的 rand()
快四倍褥符。
如果沒(méi)有提供可選參數(shù) min 和 max龙誊,mt_rand() 返回 0 到 mt_getrandmax() 之間的偽隨機(jī)數(shù)。
4喷楣、常用數(shù)學(xué)方法
1)log — 自然對(duì)數(shù)
float log ( float $arg [, float $base = M_E ] )
如果指定了可選的參數(shù) base趟大,log() 返回 logbase arg,否則 log() 返回參數(shù) arg 的自然對(duì)數(shù)铣焊。
相關(guān)方法:
log10()
— 以 10 為底的對(duì)數(shù)
2)exp — 計(jì)算 e 的指數(shù)
float exp ( float $arg )
返回 e 的 arg 次方值逊朽。
3)pow — 指數(shù)表達(dá)式
number pow ( number $base , number $exp )
返回 base 的 exp 次方的冪。如果可能曲伊,本函數(shù)會(huì)返回 integer叽讳。
5、格式化一個(gè)數(shù)字
1)number_format — 以千位分隔符方式格式化一個(gè)數(shù)字
string number_format ( float $number [, int $decimals = 0 ] )
string number_format ( float $number , int $decimals = 0 , string $dec_point = "." , string $thousands_sep = "," )
本函數(shù)可以接受1個(gè)坟募、2個(gè)或者4個(gè)參數(shù)(注意:不能是3個(gè)):
- 如果只提供第一個(gè)參數(shù)岛蚤,number的小數(shù)部分會(huì)被去掉 并且每個(gè)千位分隔符都是英文小寫(xiě)逗號(hào)","
- 如果提供兩個(gè)參數(shù),number將保留小數(shù)點(diǎn)后的位數(shù)到你設(shè)定的值懈糯,其余同樓上
- 如果提供了四個(gè)參數(shù)涤妒,number 將保留decimals個(gè)長(zhǎng)度的小數(shù)部分, 小數(shù)點(diǎn)被替換為dec_point,千位分隔符替換為thousands_sep
場(chǎng)景:默認(rèn)地赚哗,number_format函數(shù)會(huì)把這個(gè)數(shù)舍入到最接近的整數(shù)她紫。如果想你保留整個(gè)數(shù),但又無(wú)法提前知道小數(shù)點(diǎn)后有多少位屿储,這時(shí)你該怎么辦犁苏?可以使用以下解決方法:
$number = 31415.93421; //你的數(shù)
list($int,$dec) = explode('.', $number);
$formatted = number_format($number,strlen($dec)); //$formatted為:31,415.93421
參考:
官方文檔:
- Integer 整型 - http://php.net/manual/zh/language.types.integer.php
- Float 浮點(diǎn)型 - http://php.net/manual/zh/language.types.float.php
- Math 函數(shù) - http://php.net/manual/zh/ref.math.php
相關(guān)書(shū)籍:
- 《PHP經(jīng)典實(shí)例》 David Sklar & Adam Trachtenberg