Как преобразовать строку в число в PHP?

Я хочу преобразовать эти типы значений,'3', '2.34', '0.234343', etc. на номер. В JavaScript, мы можем использовать Number(), но есть ли аналогичный метод, доступный в PHP?

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

29 ответов


обычно вам не нужно это делать, так как PHP будет принуждать тип для вас в большинстве случаев. Для ситуаций, когда вы хотите явно преобразовать тип,cast это:

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

есть несколько способов сделать это:

  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().


на любом (слабо типизированном) языке вы всегда можете привести строку к числу, добавив к нему ноль.

однако в этом очень мало смысла, так как PHP будет делать это автоматически во время использования этой переменной, и он будет приведен к строке в любом случае во время вывода.

обратите внимание, что вы можете сохранить пунктирные числа в виде строк, потому что после литья в float он может быть изменен непредсказуемо, из-за природы чисел float.


чтобы избежать проблем попробовать 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
?>

Вы можете использовать:

(int)(your value);

или вы можете использовать:

intval(string)

Если вы хотите получить float для $value = '0.4', но int для $value = '4', вы можете написать:

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

немного грязно, но это работает.


можно использовать (int)_value_ например.

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

посмотреть Тип Жонглирование.


на PHP можно использовать intval(string) or floatval(string) функции для преобразования строк в числа.


вы всегда можете добавить к нему ноль!

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

просто небольшая заметка к ответам, которые могут быть полезны и безопаснее в некоторых случаях. Вы можете проверить, действительно ли строка содержит допустимое числовое значение, и только затем преобразовать его в числовой тип (например, если вам нужно манипулировать данными, поступающими из БД, которая преобразует ints в строки). Вы можете использовать is_numeric() а то floatval():

$a = "whatever"; // any variable

if (is_numeric($a)) 
    var_dump(floatval($a)); // type is float
else 
    var_dump($a); // any type

вместо того, чтобы выбирать погоду для преобразования string to int или float. Вы можете просто добавить 0 к нему и PHP автоматически преобразует результат в числовой тип.

// being sure the string is actually a number
if( is_numeric($string) )
    $number = $string + 0;
else // let's the number be 0 if the string is not a number
    $number = 0;

Я обнаружил, что в JavaScript простой способ преобразовать строку в число, чтобы умножить его на 1. Он решает проблему конкатенации, потому что символ " + "имеет несколько применений в JavaScript, в то время как символ" * " предназначен исключительно для математического умножения.

основываясь на том, что я видел здесь относительно PHP, автоматически готов интерпретировать строку, содержащую цифры, как число (и комментарии о добавлении, так как в PHP " + " предназначен исключительно для математического добавления), этот трюк умножения отлично работает и для PHP.

я протестировал его, и он работает... Хотя в зависимости от того, как вы приобрели строку, вы можете применить к ней функцию trim() перед умножением на 1.


вот функция, которую я написал, чтобы упростить вещи для себя:

Он также возвращает сокращенные версии 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") вернет строку

только будьте осторожны, так как это своего рода метод ложной проверки, и ваша фактическая переменная по-прежнему будет строкой. Вам нужно будет преобразовать фактическую переменную в правильный тип, если это необходимо. Мне просто нужно было проверить, должна ли база данных загружать идентификатор или псевдоним элемента, таким образом, не имея никаких неожиданных эффектов, так как она будет анализироваться как строка во время выполнения.

редактировать

Если вы хотите определить, являются ли объекты функциями, добавьте этот случай к коммутатору:

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

вот функция, которая достигает того, что вы ищете. Сначала мы проверяем, может ли значение быть понято как число, если да, то мы превращаем его в 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;
    }
}

кроме Boykodev ответ я предлагаю следующее:

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

$a = "10";

$b = (int)$a;

вы можете использовать это для преобразования строки в int в 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;

попробуйте использовать что-то вроде этого:

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

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

вы можете преобразовать строку в число в PHP, используя cast .


вы можете изменить тип данных следующим образом

$number = "1.234";

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

settype($number , "float");

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

по историческим причинам "double" возвращается в случае поплавка.

PHP документации


для вашего конкретного случая вы можете просто умножить на 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)

PHP сделает это за вас в пределах

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

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

все предложения теряют числовой тип это кажется мне лучшей практикой

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

да, в PHP есть аналогичный метод, но он настолько малоизвестен, что вы редко о нем услышите. Это арифметические операторы, называемые"личность", как описано здесь:

Операторы Aritmetic

преобразовать в числовую строку в число, сделайте следующее:

$a = +$a;

вы можете просто использовать функцию intval () для преобразования строки в int


просто вы можете написать так:

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

Я получил вопрос "скажем, вы писали встроенную функцию для приведения целого числа к строке в 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);

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

Другой Подход:

  1. push все это в массив / ассоциативный массив.
  2. json_encode($your_array, JSON_NUMERIC_CHECK ); дополнительно расшифровать его обратно
  3. ?
  4. профит!