如何将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;
有几种方法可以这样做:
-
将string转换为数字基本数据types:
$num = (int) "10"; $num = (double) "10.12"; // same as (float) "10.12";
-
对string执行math运算:
$num = "10" + 1; $num = floor("10.1");
-
使用
intval()
或floatval()
:$num = intval("10"); $num = floatval("10.1");
-
使用
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
转换为int
或float
。 您可以简单地添加一个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"; }
不同的方法:
- 把它全部推到一个数组/关联数组中。
-
json_encode($your_array, JSON_NUMERIC_CHECK );
可选地将其解码回来 - ?
- 利润!
$a = "7.2345"; $b = round(((float)$a),0);