当一个字符串被当作一个数值来取值,其结果和类型如下:
如果该字符串没有包含 ‘.’,’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中文网其他相关文章!