如何将string转换为PHP中的数字?

我想将这些types的值'3''2.34''0.234343'等转换为数字。 在JavaScript中,我们可以使用Number() ,但PHP中是否有类似的方法?

 Input Output '2' 2 '2.34' 2.34 '0.3454545' 0.3454545 

你通常不需要这样做,因为在大多数情况下PHP会强制你的types。 对于你想明确地转换types的情况, 其转换为:

 $num = "3.14"; $int = (int)$num; $float = (float)$num; 

有几种方法可以这样做:

  1. 将string转换为数字基本数据types:

     $num = (int) "10"; $num = (double) "10.12"; // same as (float) "10.12"; 
  2. 对string执行math运算:

     $num = "10" + 1; $num = floor("10.1"); 
  3. 使用intval()floatval()

     $num = intval("10"); $num = floatval("10.1"); 
  4. 使用settype()

无论什么(松散types)的语言,你总是可以通过添加一个零来将一个string转换成一个数字。

然而,这样做没什么意义,因为PHP在使用这个variables的时候会自动执行,而且在输出的时候它会被转换成string。

请注意,您可能希望将点状数字保留为string,因为投射到浮动状态后,由于浮动数字的性质,可能会发生不可预知的变化。

您可以使用:

 (int)(your value); 

或者你可以使用:

 intval(string) 

为了避免问题尝试intval($var) 。 一些例子:

 <?php echo intval(42); // 42 echo intval(4.2); // 4 echo intval('42'); // 42 echo intval('+42'); // 42 echo intval('-42'); // -42 echo intval(042); // 34 (octal as starts with zero) echo intval('042'); // 42 echo intval(1e10); // 1410065408 echo intval('1e10'); // 1 echo intval(0x1A); // 26 (hex as starts with 0x) echo intval(42000000); // 42000000 echo intval(420000000000000000000); // 0 echo intval('420000000000000000000'); // 2147483647 echo intval(42, 8); // 42 echo intval('42', 8); // 34 echo intval(array()); // 0 echo intval(array('foo', 'bar')); // 1 ?> 

如果你想得到$value = '0.4'浮点数,但是对于$value = '4' int,你可以这样写:

 $number = ($value == (int) $value) ? (int) $value : (float) $value; 

有点脏,但它的作品。

例如,你可以使用(int)_value_

 $string = '100'; $int = (int)$string; 

请参阅types杂耍 。

在PHP中,您可以使用intval(string) or floatval(string)函数将string转换为数字。

只是在某些情况下,对答案的一点点注意可能是有用的和安全的。 您可能需要检查string是否实际上首先包含有效的数值,然后才将其转换为数字types(例如,如果您必须操作来自将数据转换为string的数据库的数据)。 你可以使用is_numeric()floatval()

 $a = "whatever"; // any variable if (is_numeric($a)) var_dump(floatval($a)); // type is float else var_dump($a); // any type 

而不必select天气来将string转换为intfloat 。 您可以简单地添加一个0 ,PHP会自动将结果转换为数字types。

 // being sure the string is actually a number if( is_numeric($string) ) $number = $string + 0; else // let's the number be 0 if the string is not a number $number = 0; 

我发现在JavaScript中,将string转换为数字的简单方法是将其乘以1.它解决了连接问题,因为“+”符号在JavaScript中有多种用法,而“*”符号是纯粹的用于math乘法。

基于我在这里看到的关于PHP自动愿意将一个包含数字的string解释为一个数字(以及有关添加的注释,因为在PHP中,“+”纯粹是math加法),这个乘法技巧工作得很好为PHP,也。

我已经testing过了,它确实有效…虽然取决于你如何获取string,但是可能需要将trim()函数应用于它,然后再乘以1。

这是我写的一个函数来简化自己的事情:

它还返回boolean,integer,double和real的简写版本。

 function type($mixed, $parseNumeric = false) { if ($parseNumeric && is_numeric($mixed)) { //Set type to relevant numeric format $mixed += 0; } $t = gettype($mixed); switch($t) { case 'boolean': return 'bool'; //shorthand case 'integer': return 'int'; //shorthand case 'double': case 'real': return 'float'; //equivalent for all intents and purposes default: return $t; } } 

将parseNumeric设置为true的调用types将在检查types之前转换数字string。

从而:

types(“5”,true)将返回int

types(“3.7”,true)将返回浮点数

types(“500”)将返回string

只是要小心,因为这是一种错误的检查方法,你的实际variables仍然是一个string。 如果需要,您将需要将实际variables转换为正确的types。 我只是需要它来检查数据库是否应该加载一个项目ID或别名,因此没有任何意外的影响,因为它将在运行时被parsing为string。

编辑

如果您想检测对象是否有function,请将此情况添加到交换机:

 case 'object': return is_callable($mixed)?'function':'object'; 

你总是可以添加零!

 Input Output '2' + 0 2 (int) '2.34' + 0 2.34 (float) '0.3454545' + 0 0.3454545 (float) 
 $a = "10"; $b = (int)$a; 

你可以使用它在PHP中将string转换为int。

尝试使用这样的东西:

 <?php $string='5';// $ string is a variable to hold string '5' $int=intval($string);// $int is the converted string to integer $int=intval('5'); echo$int;//5 ?> 
  $num = "3.14"; $int = (int)$num; // output = 3 $float = (float)$num; // output = 3.14 $double = (double)$num; // output = 3.14 

您可以使用强制转换将string转换为PHP中的数字。

除了Boykodev答案,我build议这样做:

 Input Output '2' * 1 2 (int) '2.34' * 1 2.34 (float) '0.3454545' * 1 0.3454545 (float) 

您可以如下更改数据types

 $number = "1.234"; echo gettype ($number) . "\n"; //Returns string settype($number , "float"); echo gettype ($number) . "\n"; //Returns float 

由于历史原因,在浮动情况下返回“double”。

PHP文档

您可以使用:

 ((int) $var) ( but in big number it return 2147483647 :-) ) 

但最好的解决办法是使用:

 if (is_numeric($var)) $var = (isset($var)) ? $var : 0; else $var = 0; 

要么

 if (is_numeric($var)) $var = (trim($var) == '') ? 0 : $var; else $var = 0; 

对于你的具体情况,你可以乘以1将string转换为数字在PHP中。 PHP自动处理浮动和整数。

 $num = "2.12"; var_dump(is_float($num)); //bool(false) var_dump(is_int($num)); //bool(false) var_dump(is_string($num)); //bool(true) $num = $num*1; var_dump(is_float($num)); //bool(true) var_dump(is_int($num)); //bool(false) var_dump(is_string($num)); //bool(false) 

这是实现你正在寻找的function。 首先我们检查一下数值是否可以理解为一个数字,如果是的话我们把它变成一个int和一个float。 如果int和float是相同的(例如,5 == 5.0),那么我们返回int值。 如果int和float不相同(例如,5!= 5.3),那么我们假设你需要float的精度并返回该值。 如果值不是数字,我们会抛出警告并返回null。

 function toNumber($val) { if (is_numeric($val)) { $int = (int)$val; $float = (float)$val; $val = ($int == $float) ? $int : $float; return $val; } else { trigger_error("Cannot cast $val to a number", E_USER_WARNING); return null; } } 

PHP会在你的限制范围内为你做

 <?php $str="3.148"; $num=$str; printf("%f\n", $num); ?> 

所有的build议松散的数字types这在我看来是一个最佳实践

 function str2num($s){ //returns a num or FALSE $return_value = !is_numeric($s) ? false : (intval($s)==floatval($s)) ? intval($s) :floatval($s); print "\nret=$return_value type=".gettype($return_value)."\n"; } 

不同的方法:

  1. 把它全部推到一个数组/关联数组中。
  2. json_encode($your_array, JSON_NUMERIC_CHECK ); 可选地将其解码回来
  3. 利润!
 $a = "7.2345"; $b = round(((float)$a),0);