我想将这些类型的值“3”、“2.34”、“0.234343”等转换为数字。在JavaScript中,我们可以使用Number(),但在PHP中有没有类似的方法?
Input Output
'2' 2
'2.34' 2.34
'0.3454545' 0.3454545
我想将这些类型的值“3”、“2.34”、“0.234343”等转换为数字。在JavaScript中,我们可以使用Number(),但在PHP中有没有类似的方法?
Input Output
'2' 2
'2.34' 2.34
'0.3454545' 0.3454545
当前回答
简单地说,你可以这样写:
<?php
$data = ["1","2","3","4","5"];
echo json_encode($data, JSON_NUMERIC_CHECK);
?>
其他回答
所有建议都会丢失数字类型。
在我看来,这是一个最佳实践:
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";
}
下面是我为自己编写的一个函数:
它还返回布尔、整数、双精度和实数的简写版本。
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的类型将在检查类型之前转换数字字符串。
因此:
type(“5”,true)将返回int
类型(“3.7”,true)将返回float
类型(“500”)将返回字符串
只是要小心,因为这是一种错误检查方法,而实际变量仍然是字符串。如果需要,您需要将实际变量转换为正确的类型。我只需要它来检查数据库是否应该加载项id或别名,这样就不会产生任何意外的影响,因为它在运行时将被解析为字符串。
Edit
如果要检测对象是否为函数,请在开关中添加以下情况:
case 'object': return is_callable($mixed)?'function':'object';
好的,所以我刚刚遇到了这个问题。我的问题是所讨论的数字/字符串具有不同的位数。有些没有小数,有些有几个。所以对我来说,使用int、float、double、intval或floatval都会根据数字给出不同的结果。
所以,简单的解决方案。。。将字符串除以服务器端的1。这会将其强制为一个数字,并保留所有数字,同时修剪不必要的0。它不漂亮,但它有效。
"your number string" / 1
Input Output
"17" 17
"84.874" 84.874
".00234" .00234
".123000" .123
"032" 32
PHP将在限制范围内为您提供
<?php
$str = "3.148";
$num = $str;
printf("%f\n", $num);
?>
有一种方法:
$value = json_decode(json_encode($value, JSON_NUMERIC_CHECK|JSON_PRESERVE_ZERO_FRACTION|JSON_UNESCAPED_SLASHES), true);
使用is_*不起作用,因为变量是:string。
使用json_encode()和json_edecode()的组合将其转换为“真”形式。如果它是真字符串,则输出错误。
$num = "Me";
$int = (int)$num;
$float = (float)$num;
var_dump($num, $int, $float);
将输出:string(2)“Me”int(0)float(0)