首页  >  文章  >  后端开发  >  php字符串自身计算及与数值计算用法详解

php字符串自身计算及与数值计算用法详解

伊谢尔伦
伊谢尔伦原创
2017-06-21 11:27:421805浏览

当一个字符串被当作一个数值来取值,其结果和类型如下:

如果该字符串没有包含 ‘.’,’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中两个字符串相比较(6d267e5fab17ea8bc578f9e7e5e1570b ==);

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=&#39;100&#39;;
$b=&#39;20&#39;;
则$a>$b;

但是

如$a=&#39;&#39;100a;
$b=&#39;20&#39;;时,
结果为$a<$b;

以上是php字符串自身计算及与数值计算用法详解的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn