1.报错背景

Notice: A non well formed numeric value encountered。在使用(+ - * / ** % << >> | & ^) 运算时,例如a+b,如果a是开始一个数字值,但包含非数字字符(123a),b不是数字值开始时(b456),就会有A non-numeric value encountered警告。

2.解决方案,字符串转数值

$str = '1px';
echo intval($str);//1
echo rtrim($str, 'px');//1

以上是简单的转数值方法,当然还有其他的方法。

2.1number_format()

用于将字符串转换为数字。它会在成功时返回格式化的数字,否则会在失败时给出E_WARNING。

$num = "1000.314"; 
// 使用number_format()函数将字符串转换为数字,输出1,000
echo number_format($num), "\n"; 
// 函数的作用是:将字符串转换为数字,输出1,000.31
echo number_format($num, 2); 

2.2类型转换

直接将字符串转换为float,double或integer基本类型。这是将字符串转换为数字而不使用任何函数的最佳方法。

$num = "1000.314"; 
// 使用int类型转换,输出1000
echo (int)$num, "\n"; 
// 使用float 类型转换,输出1000.314
echo (float)$num, "\n"; 
// 使用double 类型转换,输出1000.314
echo (double)$num; 

2.3intval()和floatval()函数

可用于将字符串分别转换为其对应的整数和浮点值。

$num = "1000.314"; 
// intval函数的作用是:将字符串转换为整数,输出1000
echo intval($num), "\n";  
// floatval函数的作用是:将字符串转换为浮点数,输出1000.314
echo floatval($num); 

2.4添加0或执行数学运算

通过在字符串中添加0,也可以将字符串编号转换为整数或浮点数。执行数学运算时,字符串将隐式转换为整数或浮点数。

$num = "1000.314"; 
// 对隐式类型转换执行数学运算,输出1000.314
echo $num + 0, "\n";  
// 对隐式类型转换执行数学运算,输出1000.314
echo $num + 0.0, "\n"; 
// 对隐式类型转换执行数学运算,输出1000.314
echo $num + 0.1;