當一個字串被當作一個數值來取值,其結果和型別如下:
#如果字串沒有包含'.','e' 或'E ' 且其數字值在整數型的範圍之內(由PHP_INT_MAX 所定義),該字串將會被當成integer 來取值。其它所有情況下都被作為 float 來取值。
該字串的開始部分決定了它的值。如果字串以合法的數值開始,則使用該數值。否則其值為 0(零)。合法數值由可選的正負號,後面跟著一個或多個數字(可能有小數點),再跟著可選的指數部分。指數部分由 ‘e’ 或 ‘E’ 後面跟著一個或多個數字構成。
如下會被轉換成整數:
[+/-][0-9][*]
如下會被轉換成浮點型數:
[+/-][0-9][.][0-9][e/E][0-9][*]
$r = '123' + 1; var_dump($r);// 输出结果 int(124)$r = '123.4' + 1; var_dump($r);// 输出结果 float(124.4)$r = '1.5e4' + 1; var_dump($r);// 输出结果 float(15001)$r = '123456789123456789' + 1; var_dump($r);// 输出结果 float(1.2345678912346E+17)$r = '123abc' + 1; var_dump($r);// 输出结果 int(124)$r = '123e1abc' + 1; var_dump($r);// 输出结果 float(1231)$r = '123.abc' + 1; var_dump($r);//输出结果 float(124)$r = '+123abc' + 1; var_dump($r);// 输出结果 int(124)$r = '-123abc' + 1; var_dump($r);// 输出结果 int(-122)$r = 'abc' + 1; var_dump($r);// 输出结果 int(1)
已經確定需要的是整數(浮點數),則可以使用intval()(floatval())先將字串轉換成整數(浮點數),然後再與其他數值進行計算。
一。 PHP中數值型字串相加
1.若兩個字串開頭沒有有效數值或不是數值型字串,這兩個字串相加時都會看成0;
$a="abc"; $b="b01"; $a+$b是0
2.兩個數值型字串相加時,有效數字進行相加。
$a="100"; $b="01a"; $a+$b=101;
3/如果字串中帶有‘.’,'e','E'時,按float型數字處理。
$a="100"; $b="12.6a"; $a+$b=112.6;
$a='10'; $b='12.3e3'; $a+$b同样为float型float(12310)
二.php中兩個字串相比較(< > ==);
1.php中兩個字串比較是否相等,一般不用(==),因為(==)會改變原有資料型別,而是用strcmp(str1,str2)系列函數strcmp($str1,$str2);(strcmp是強制轉化為string型進行比較)。
$a='123'; $b='123.';($b后多了一个小数点)
但是有(==)比較是結果卻是true
var_dump($a==$b);
所以一般不用(= =)進行字串的比較。
另外,當一個數字與字串進行比較時,字串會轉換為int或float型(numberic_string含有‘.’,'e','E')。
‘abc’转化为int(0); ‘12ab’转化为int(12); ‘12.3e3'转化为float(12300);
2.( > < )的比較
2-1:如果是兩個字串的比較,則逐一比較對應的字元的ascii碼。
2-2:如果是數字與字串進行比較,字串先轉換為數字,然後再比較。
2-3:如果是兩個數字型字串(純數字型字串)進行比較,則這兩個字串首先轉換為數字再進行比較。
$a='100'; $b='20'; 则$a>$b;
但是
如$a=''100a; $b='20';时, 结果为$a<$b;
以上是php字串自身計算及與數值計算用法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!