提问人:Sara 提问时间:12/16/2011 最后编辑:YanDatsiukSara 更新时间:12/5/2022 访问量:2804314
如何在 PHP 中将字符串转换为数字?
How do I convert a string to a number in PHP?
问:
我想将这些类型的值、、、等转换为数字。在 JavaScript 中,我们可以使用 ,但是 PHP 中是否有类似的方法?'3'
'2.34'
'0.234343'
Number()
Input Output
'2' 2
'2.34' 2.34
'0.3454545' 0.3454545
答:
PHP将在一定范围内为您完成
<?php
$str = "3.148";
$num = $str;
printf("%f\n", $num);
?>
评论
$num = $str;
sprintf
printf("%s\n", $str)
在 PHP 中,您可以使用函数将字符串转换为数字。intval(string) or floatval(string)
评论
有几种方法可以做到这一点:
将字符串强制转换为数字基元数据类型:
$num = (int) "10"; $num = (double) "10.12"; // same as (float) "10.12";
对字符串执行数学运算:
$num = "10" + 1; $num = floor("10.1");
-
$num = intval("10"); $num = floatval("10.1");
使用
settype()。
评论
(double)
(float)
$num = "10" + 1
intval("9999999999")==2147483647
intval
很有用,因为这样你就可以在铸造无法做到的地方使用它。array_map('intval', $arrayOfStrings);
$num = "10" + 1;
$num = "10" * 1;
toNumber(..)
$a = "10";
$b = (int)$a;
您可以使用它在 PHP 中将字符串转换为 int。
评论
您通常不需要这样做,因为在大多数情况下,PHP 会强制您输入类型。对于确实要显式转换类型的情况,请强制转换它:
$num = "3.14";
$int = (int)$num;
$float = (float)$num;
评论
您可以使用:
(int)(your value);
或者,您可以使用:
intval(string)
评论
在任何(松散类型)语言中,您始终可以通过向数字添加零来将字符串转换为数字。
然而,这没有什么意义,因为 PHP 会在使用此变量时自动执行此操作,并且在输出时无论如何都会将其转换为字符串。
请注意,您可能希望将虚线数字保留为字符串,因为在转换为浮点数后,由于浮点数的性质,它可能会发生不可预测的更改。
评论
typeof('123'+0)
'string'
'123'+0
'1230'
0+'123'
123
只是对在某些情况下可能有用且更安全的答案的一点说明。
您可能希望首先检查字符串是否实际上包含有效的数值,然后才将其转换为数值类型(例如,如果您必须操作来自将 int 转换为字符串的数据库的数据)。您可以使用,然后:is_numeric()
floatval()
$a = "whatever"; // any variable
if (is_numeric($a))
var_dump(floatval($a)); // type is float
else
var_dump($a); // any type
评论
您可以按如下方式更改数据类型
$number = "1.234";
echo gettype ($number) . "\n"; //Returns string
settype($number , "float");
echo gettype ($number) . "\n"; //Returns float
由于历史原因,在浮点数的情况下返回“double”。
您可以使用:
((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;
这是我编写的一个函数,用于为自己简化事情:
它还返回布尔值、整数、双精度和实数的简写版本。
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
type(“3.7”, true) 将返回浮点数
type(“500”) 将返回字符串
请注意,这是一种错误的检查方法,您的实际变量仍然是一个字符串。如果需要,您需要将实际变量转换为正确的类型。我只需要它来检查数据库是否应该加载项目 ID 或别名,因此不会产生任何意外影响,因为它无论如何都会在运行时解析为字符串。
编辑
如果要检测对象是否为函数,请将以下情况添加到交换机中:
case 'object': return is_callable($mixed)?'function':'object';
我发现在 JavaScript 中,将字符串转换为数字的一种简单方法是将其乘以 1。它解决了串联问题,因为“+”符号在 JavaScript 中有多种用途,而“*”符号纯粹用于数学乘法。
基于我在这里看到的关于PHP自动愿意将包含数字的字符串解释为数字(以及关于加法的评论,因为在PHP中“+”纯粹用于数学加法),这个乘法技巧也适用于PHP。
我已经测试过了,它确实有效......尽管根据您获取字符串的方式,您可能希望在乘以 1 之前对其应用 trim() 函数。
评论
$var = +$str;
为了避免出现问题,请尝试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
?>
评论
12.7896
(int)$my_str
01
013
如果你想得到一个浮点数,但是int for ,你可以这样写:$value = '0.4'
$value = '4'
$number = ($value == (int) $value) ? (int) $value : (float) $value;
它有点脏,但它有效。
评论
strpos($val, '.') === false ? intval($val) : floatval($val);
2.1e2
210.0
2.1e2
+
var_dump(+'0.4', +'4')
所有建议都将丢失数值类型。
在我看来,这似乎是一种最佳实践:
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";
}
您不必选择是否将 转换为 或 ,只需向其添加 a,PHP 就会自动将结果转换为数值类型。string
int
float
0
// Being sure the string is actually a number
if (is_numeric($string))
$number = $string + 0;
else // Let the number be 0 if the string is not a number
$number = 0;
评论
这是实现您正在寻找的功能的功能。首先,我们检查该值是否可以理解为一个数字,如果可以,我们将其转换为 int 和一个浮点数。如果 int 和 float 相同(例如,5 == 5.0),那么我们返回 int 值。如果 int 和 float 不相同(例如,5 != 5.3),那么我们假设您需要浮点数的精度并返回该值。如果该值不是数字,我们将抛出警告并返回 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;
}
}
你总是可以给它加零!
Input Output
'2' + 0 2 (int)
'2.34' + 0 2.34 (float)
'0.3454545' + 0 0.3454545 (float)
评论
A non well formed numeric value encountered
除了博伊科杰夫的回答之外,我还建议:
Input Output
'2' * 1 2 (int)
'2.34' * 1 2.34 (float)
'0.3454545' * 1 0.3454545 (float)
评论
$id_cron = (string)date('YmdHi'); $target_id_cron = $id_cron - 1;
A non well formed numeric value encountered
$num = '12,24' * 1
PHP
.
'12.24' * 1
+ 0
在一次编程采访中,我遇到了一个问题:“假设你正在编写用于在 PHP 中将整数转换为字符串的内置函数,您将如何编写该函数”。这是一个解决方案。
$nums = ["0","1","2","3","4","5","6","7","8","9"];
$int = 15939;
$string = "";
while ($int) {
$string .= $nums[$int % 10];
$int = (int)($int / 10);
}
$result = strrev($string);
评论
是的,PHP 中也有类似的方法,但它鲜为人知,以至于您很少听说过它。它是一个称为“标识”的算术运算符,如下所述:
要将数字字符串转换为数字,请执行以下操作:
$a = +$a;
评论
is_numeric
简单地说,你可以这样写:
<?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);
使用 将不起作用,因为 是 a: .is_*
variable
string
使用 和 的组合,然后将其转换为“真实”形式。如果它是 true,那么它将输出错误。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)
评论
我一直在阅读答案,没有看到任何人提到 PHP 数字转换中最大的警告。
投票最多的答案建议执行以下操作:
$str = "3.14"
$intstr = (int)$str // now it's a number equal to 3
这太棒了。PHP 是直接强制转换的。但是,如果我们执行以下操作呢?
$str = "3.14is_trash"
$intstr = (int)$str
PHP 是否认为这种转换有效?
显然是的。
PHP 读取字符串,直到找到所需类型的第一个非数字字符。这意味着对于整数,数字字符是 [0-9]。因此,它读取 ,因为它在 [0-9] 字符范围内,因此它继续读取。读取并在此处停止,因为它不在 [0-9] 范围内。3
.
如果您要将其转换为浮动或双倍,也会发生同样的情况。PHP 会读 ,然后 ,然后 ,然后 ,并且会停止在,因为它不是有效的浮点数值字符。3
.
1
4
i
因此,计算结果为 false,但计算结果为 。"million" >= 1000000
"1000000million" >= 1000000
true
另请参阅:
https://www.php.net/manual/en/language.operators.comparison.php 比较时如何完成转换
https://www.php.net/manual/en/language.types.string.php#language.types.string.conversion 字符串如何转换为相应的数字
评论
is_numeric($str)
对此有所帮助。(正如前面的两个答案所示 - 所以“没有人提到最大的警告”并不完全准确 - 尽管我看到没有人详细解释这个问题。
只需将数字乘以 1,以便将字符串转换为类型 number。
//String value
$string = "5.1"
if(is_numeric($string)){
$numeric_string = $string*1;
}
评论
如果您事先不知道您有浮点数还是整数,
并且字符串可能包含特殊字符(如空格、€ 等),
并且它可能包含超过 1 个点或逗号,
则可以使用此函数:
// 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
//Get Only number from string
$string = "123 Hello Zahid";
$res = preg_replace("/[^0-9]/", "", $string);
echo $res."<br>";
//Result 123
迟到,但这里有另一种方法:
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
评论
实现它的众多方法之一是:
$fileDownloadCount = (int) column_data_from_db;
$fileDownloadCount++;
第二行将该值递增 1。
如果你想要一个字符串的数值,并且因为你不确定而不想将其转换为float/int,这个技巧会将其转换为正确的类型:
function get_numeric($val) {
if (is_numeric($val)) {
return $val + 0;
}
return 0;
}
Example:
<?php
get_numeric('3'); // int(3)
get_numeric('1.2'); // float(1.2)
get_numeric('3.0'); // float(3)
?>
来源:https://www.php.net/manual/en/function.is-numeric.php#107326
评论
get_numeric(010); // int 8
get_numeric('010'); // int 10
010
现在我们正处于一个严格/强类型在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)
评论
好吧,所以我刚刚遇到了这个问题。我的问题是所讨论的数字/字符串具有不同数量的数字。有些没有小数,有些则有几个。所以对我来说,使用、、、或全部根据数字给我不同的结果。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
评论
function convert_to_number($number) {
return is_numeric($number) ? ($number + 0) : FALSE;
}
使用一元运算符 (+)。例如:
$n1 = +'7';
$n2 = '2.34';
$n2 = +$n1;
var_dump($n 1): 整数(7) var_dump($n 2): 浮点数(2.34)
评论
您只需将 0 添加到字符串中,即可将其转换为数字,而不会丢失初始原始值。举个例子:
dd('0.3454545' + 0)
PHP 将为您处理转换,或者按照已经建议的在字符串前添加 +。
上一个:在 Java 中转换变量
下一个:直接铸造与“作为”操作员?
评论
int
float
float
int