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

时间:2011-12-16 04:08:14

标签: php type-conversion

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

Input             Output
'2'               2
'2.34'            2.34
'0.3454545'       0.3454545

37 个答案:

答案 0 :(得分:807)

您通常不需要这样做,因为PHP会在大多数情况下强制为您提供类型。对于您希望显式转换类型的情况,cast

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

答案 1 :(得分:132)

有几种方法可以这样做:

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

    $num = (int) "10";
    $num = (double) "10.12"; // same as (float) "10.12";
    
  2. 对字符串执行数学运算:

    $num = "10" + 1;
    $num = floor("10.1");
    
  3. 使用intval()floatval()

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

答案 2 :(得分:45)

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

然而,由于PHP在使用此变量时会自动执行此操作,因此在输出时无论如何都将转换为字符串。

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

答案 3 :(得分:39)

为避免出现问题,请尝试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
?>

答案 4 :(得分:22)

您可以使用:

(int)(your value);

或者您可以使用:

intval(string)

答案 5 :(得分:17)

如果你想为$value = '0.4'获取一个浮点数,但为$value = '4'得到一个int,你可以写:

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

它有点脏,但它有效。

答案 6 :(得分:14)

例如,您可以使用(int)_value_

$string = '100';
$int = (int)$string;

请参阅Type Juggling

答案 7 :(得分:12)

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

答案 8 :(得分:12)

您可以随时添加零!

Input             Output
'2' + 0           2 (int)
'2.34' + 0        2.34 (float)
'0.3454545' + 0   0.3454545 (float)

答案 9 :(得分:12)

您无需选择是否将string转换为intfloat,而只需向其添加0,PHP就会自动转换结果到数字类型。

// 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;

答案 10 :(得分:10)

在某些情况下,只需注意一些有用且更安全的答案。 您可能想要先检查字符串是否实际包含有效数值,然后再将其转换为数字类型(例如,如果必须操作来自将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

答案 11 :(得分:8)

这是实现您所需要的功能。首先,我们检查值是否可以理解为数字,如果是,我们将其转换为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;
    }
}

答案 12 :(得分:6)

如果您想获取字符串的数值,并且由于不确定而不想将其转换为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

答案 13 :(得分:6)

Boykodev's answer之外,我建议:

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

答案 14 :(得分:6)

    $num = "3.14";
    $int = (int)$num; // Output = 3
    $float = (float)$num; // Output = 3.14
    $double = (double)$num; // Output = 3.14

您可以使用强制转换将字符串转换为PHP中的数字。

答案 15 :(得分:6)

我发现在JavaScript中将字符串转换为数字的简单方法是将其乘以1.它解决了连接问题,因为“+”符号在JavaScript中有多种用法,而“*”符号纯粹是为了数学乘法。

根据我在这里看到的有关PHP自动愿意将包含数字的字符串解释为数字(以及关于添加的注释,因为在PHP中“+”纯粹用于数学加法),这个乘法技巧对PHP也很好。

我测试了它,它确实有效......虽然取决于你如何获取字符串,你可能想要在它乘以1之前对它应用trim()函数。

答案 16 :(得分:6)

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

它还返回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的调用类型将在检查类型之前转换数字字符串。

因此:

type(“5”,true)将返回int

type(“3.7”,true)将返回float

type(“500”)将返回字符串

请注意,因为这是一种错误的检查方法,您的实际变量仍然是一个字符串。如果需要,您需要将实际变量转换为正确的类型。我只是需要它来检查数据库是否应该加载项ID或别名,因此没有任何意外的影响,因为它无论如何都会在运行时被解析为字符串。

修改

如果您想检测对象是否为函数,请将此案例添加到交换机:

case 'object': return is_callable($mixed)?'function':'object';

答案 17 :(得分:5)

您可以简单地这样写:

<?php
    $data = ["1","2","3","4","5"];
    echo json_encode($data, JSON_NUMERIC_CHECK);
?>

答案 18 :(得分:5)

是的,PHP中有类似的方法,但很少有人知道你很少会听到它。它是一个名为“ identity ”的算术运算符,如下所述:

Aritmetic Operators

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

$a = +$a;

答案 19 :(得分:5)

您只需使用intval()函数将字符串转换为int。

答案 20 :(得分:4)

尝试使用以下内容:

<?php
    $string = '5'; // The $ string is a variable to hold string '5'
    $int = intval($string); // $int is the converted string to integer $int = intval('5');
    echo $int; // 5
?>

答案 21 :(得分:4)

您可以使用:

((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;

答案 22 :(得分:4)

$a = "10";

$b = (int)$a;

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

答案 23 :(得分:3)

仅将数字乘以1即可将字符串转换为数字类型。

//String value
$string = "5.1"
if(is_numeric($string)){
  $numeric_string = $string*1;
}

答案 24 :(得分:2)

PHP将在限制范围内为您完成

<?php
   $str = "3.148";
   $num = $str;

   printf("%f\n", $num);
?>

答案 25 :(得分:2)

晚了聚会,但这是另一种方法:

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

答案 26 :(得分:2)

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

$number = "1.234";

echo gettype ($number) . "\n"; //Returns string

settype($number , "float");

echo gettype ($number) . "\n"; //Returns float

由于历史原因,在浮动的情况下会返回“double”。

PHP Documentation

答案 27 :(得分:2)

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

在我看来,这是一种最佳做法:

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

答案 28 :(得分:2)

对于您的具体情况,您可以乘以1将字符串转换为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)

答案 29 :(得分: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;
}

答案 30 :(得分:1)

//Get Only number from string
$string = "123 Hello Zahid";
$res = preg_replace("/[^0-9]/", "", $string);
echo $res."<br>";
//Result 123

答案 31 :(得分:0)

我得到了问题&#34;假设您正在编写用于在PHP中将字符串转换为字符串的内置函数,您将如何编写该函数&#34;在编程面试中。这是一个解决方案。

$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);

答案 32 :(得分:0)

有一种方法:

private void setPrice(Bike bike, HttpServletRequest request, ArrayList<String> errors){
    String priceS = request.getParameter("price");
    double price = Double.parseDouble(priceS);
    try{
        bike.setPrice(price);
    } catch (DomainException e){
        errors.add(e.getMessage());
    }
}

由于max_val = 800 def split_x (x): lst=[] while x > max_val: x=x-max_val lst.append(max_val) if x != 0: lst.append(x) return lst data = {'id':['A', 'B'], 'value':[2000,600]} df = pd.DataFrame(data) df_new=pd.DataFrame({'id':[],'value':[]}) for i in range(len(df)): d=df.loc[i]['value'] id=df.loc[i]['id'] s=split_x(d) for i in range(len(s)): print (i,s[i]) df_new=df_new.append({'id':id,'value':s[i]},ignore_index=True) >>> df_new id value 0 A 800.0 1 A 800.0 2 A 400.0 3 B 600.0 $value = json_decode(json_encode($value, JSON_NUMERIC_CHECK|JSON_PRESERVE_ZERO_FRACTION|JSON_UNESCAPED_SLASHES), true); ,因此无法使用is_*

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

json_decode()

将会输出:string

答案 33 :(得分: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,然后依次读取.,然后依次14,然后停止在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字符串如何转换为相应的数字

答案 34 :(得分:0)

可以实现的众多方法之一是:

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

第二行将值增加1。

答案 35 :(得分:-2)

$a = "7.2345";
$b = round(((float)$a),0);

答案 36 :(得分:-6)

不同的方法:

  1. 将其全部推送到数组/关联数组中。
  2. json_encode($your_array, JSON_NUMERIC_CHECK);可选择将其解码回来
  3. 利润!