我想把这些值'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
虽然有些晚,但这里还有另一种方法:
function cast_to_number($input) {
if(is_float($input) || is_int($input)) {
return $input;
}
if(!is_string($input)) {
return false;
}
if(preg_match('/^-?\d+$/', $input)) {
return intval($input);
}
if(preg_match('/^-?\d+\.\d+$/', $input)) {
return floatval($input);
}
return false;
}
cast_to_number('123.45'); // (float) 123.45
cast_to_number('-123.45'); // (float) -123.45
cast_to_number('123'); // (int) 123
cast_to_number('-123'); // (int) -123
cast_to_number('foo 123 bar'); // false
现在我们处于一个严格/强类型在 PHP 中越来越重要的时代,我使用 json_decode
:
$num = json_decode('123');
var_dump($num); // outputs int(123)
$num = json_decode('123.45');
var_dump($num); // outputs float(123.45)
function convert_to_number($number) {
return is_numeric($number) ? ($number + 0) : FALSE;
}
您可以使用:
((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;
就像这样:
<?php
$data = ["1","2","3","4","5"];
echo json_encode($data, JSON_NUMERIC_CHECK);
?>
有一种方法:
$value = json_decode(json_encode($value, JSON_NUMERIC_CHECK|JSON_PRESERVE_ZERO_FRACTION|JSON_UNESCAPED_SLASHES), true);
使用 is_*
是不可行的,因为 variable
是一个: string
。
使用 json_encode()
和 json_decode()
的组合,它将被转换为其“真实”形式。如果它是一个真正的 string
,那么它将输出错误。
$num = "Me";
$int = (int)$num;
$float = (float)$num;
var_dump($num, $int, $float);
string(2) "Me" int(0) float(0)
$number = "1.234";
echo gettype ($number) . "\n"; //Returns string
settype($number , "float");
echo gettype ($number) . "\n"; //Returns float
如果您事先不知道一个字符串是浮点数还是整数,
并且该字符串可能包含特殊字符(如空格、€等),
并且它可能包含多个点或逗号,
那么您可以使用此函数:
// This function strip spaces and other characters from a string and return a number.
// It works for integer and float.
// It expect decimal delimiter to be either a '.' or ','
// Note: everything after an eventual 2nd decimal delimiter will be removed.
function stringToNumber($string) {
// return 0 if the string contains no number at all or is not a string:
if (!is_string($string) || !preg_match('/\d/', $string)) {
return 0;
}
// Replace all ',' with '.':
$workingString = str_replace(',', '.', $string);
// Keep only number and '.':
$workingString = preg_replace("/[^0-9.]+/", "", $workingString);
// Split the integer part and the decimal part,
// (and eventually a third part if there are more
// than 1 decimal delimiter in the string):
$explodedString = explode('.', $workingString, 3);
if ($explodedString[0] === '') {
// No number was present before the first decimal delimiter,
// so we assume it was meant to be a 0:
$explodedString[0] = '0';
}
if (sizeof($explodedString) === 1) {
// No decimal delimiter was present in the string,
// create a string representing an integer:
$workingString = $explodedString[0];
} else {
// A decimal delimiter was present,
// create a string representing a float:
$workingString = $explodedString[0] . '.' . $explodedString[1];
}
// Create a number from this now non-ambiguous string:
$number = $workingString * 1;
return $number;
}
(123)456-7890
,你想从中提取1234567890
吗?还是说它只找到第一个数字,所以在我的例子中会得到123
的结果? - ToolmakerSteve//Get Only number from string
$string = "123 Hello Zahid";
$res = preg_replace("/[^0-9]/", "", $string);
echo $res."<br>";
//Result 123
所有建议都不带有数字类型。
这对我来说似乎是最佳实践:
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";
}
int
或float
(当给定int
时,通常不需要float
)。 - Matthieu Napoli2
被内部存储为Number:"JavaScript代码中的数字字面量(如37)是浮点值,而不是整数。在日常使用中没有单独的整数类型。(JavaScript现在有一个BigInt类型,但它并不是为了取代Number而设计的。37仍然是一个Number,而不是BigInt。)"因此,在JS中,Number(your_string)
之所以能够实现你想要的功能,是因为其他地方的逻辑默认将2
显示为"2"
而不是"2.0"
。 - ToolmakerSteve