如何在PHP中将字符串转换为数字?

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

Input             Output'2'               2'2.34'            2.34'0.3454545'       0.3454545
2559961 次浏览

PHP将在一定范围内为您完成

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

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

有几种方法可以做到这一点:

  1. 将字符串转换为数字基元数据类型:

    $num = (int) "10";$num = (double) "10.12"; // same as (float) "10.12";
  2. Perform math operations on the strings:

    $num = "10" + 1;$num = floor("10.1");
  3. Use intval() or floatval():

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

$a = "10";
$b = (int)$a;

您可以使用它将字符串转换为php中的int。

您通常不需要这样做,因为PHP在大多数情况下会为您强制类型。对于您确实想要显式转换类型的情况,投下 it:

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

您可以使用:

(int)(your value);

或者您可以使用:

intval(string)

在任何(松散类型)语言中,您都可以通过向其添加零将字符串转换为数字。

但是,这没有什么意义,因为PHP会在使用此变量时自动执行此操作,并且无论如何都会在输出时转换为字符串。

请注意,您可能希望将虚线数字保留为字符串,因为在转换为浮点数后,由于浮点数的性质,它可能会不可预测地更改。

只是在某些情况下有用和更安全的答案的一点说明。您可能需要先检查字符串是否实际包含有效的数值,然后再将其转换为数字类型(例如,如果您必须操作来自将int转换为字符串的数据库的数据)。您可以使用is_numeric(),然后使用floatval()

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

您可以按如下方式更改数据类型

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

由于历史原因,在浮点数的情况下返回“双精度”。

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;

这是我为自己编写的一个简化函数:

它还返回布尔、整数、双精度和实数的速记版本。

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'; //shorthandcase 'integer': return 'int';  //shorthandcase 'double': case 'real': return 'float'; //equivalent for all intents and purposesdefault: return $t;}}

将parseNumrick设置为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()函数。

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

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

如果您想为$value = '0.4'获取浮点数,但为$value = '4'获取int,您可以编写:

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

它有点脏,但它工作。

所有建议都会丢失数字类型。

这似乎是一个最佳实践:

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";}

无需选择是将string转换为int还是float,只需向其添加0,PHP将自动将结果转换为数字类型。

// Being sure the string is actually a numberif (is_numeric($string))$number = $string + 0;else // Let the number be 0 if the string is not a number$number = 0;

这是实现你所寻找的功能。首先我们检查值是否可以理解为一个数字,如果可以,我们将其转换为一个整型和一个浮点数。如果int和浮点数相同(例如,5==5.0),那么我们返回int值。如果int和浮点数不相同(例如,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)

除了Boykodev的回答之外,我建议这样做:

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

在一次编程面试中,我遇到了一个问题“假设你正在编写用于将整数转换为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中有一个类似的方法,但它鲜为人知,你很少听说过它。它是一个名为“身份”的算术运算符,如下所述:

Aritmetic运算符

要将数字字符串转换为数字,请执行以下操作:

$a = +$a;

简单地说,你可以这样写:

<?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是a:string

使用json_encode()json_decode()的组合将其转换为“true”形式。如果它是truestring,那么它将输出错误。

$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]。结果,它读取3,因为它在[0-9]字符范围内,它继续读取。读取.并在那里停止,因为它不在[0-9]范围内。

如果您要强制转换为浮点数或双精度,也会发生同样的情况。PHP将读取3,然后.,然后1,然后4,并将停止在i,因为它不是有效的浮点数字符。

因此,"million" >= 1000000的计算结果为false,但"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如何将字符串转换为相应的数字

仅将数字乘以1,以便将字符串转换为类型数字。

//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;}
//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.45cast_to_number('-123.45');      // (float) -123.45cast_to_number('123');          // (int) 123cast_to_number('-123');         // (int) -123cast_to_number('foo 123 bar');  // false

实现它的众多方法之一是:

$fileDownloadCount          =  (int) column_data_from_db;$fileDownloadCount++;

第二行将值增加1。

如果你想要一个字符串的数值,并且因为不确定而不想将其转换为浮点数/int,这个技巧将把它转换为正确的类型:

function get_numeric($val) {if (is_numeric($val)) {return $val + 0;}return 0;}
Example:<?phpget_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

现在我们正处于一个严格/强类型在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)

好的,我刚刚遇到了这个问题。我的问题是,所讨论的数字/字符串具有不同的位数。有些没有小数,有些有几个。所以对我来说,使用intfloatdoubleintvalfloatval都会给我不同的结果,具体取决于数字。

所以,简单的解决方案…将字符串除以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($n1): int(7)var_dump($n2):浮动(2.34)

您可以将0添加到字符串中,然后将其转换为数字而不会丢失初始原始值。例如:

dd('0.3454545' + 0)

PHP将为您处理转换,或者像已经建议的那样在字符串之前添加+。