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



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



Input             Output
'2' 2
'2.34' 2.34
'0.3454545' 0.3454545
3244   29  

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 будет делать это автоматически во время использования этой переменной, и он будет приведен к строке в любом случае во время вывода.

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

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

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

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

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

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

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

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

In 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 преобразует числовые строки перед проверкой типа.

таким образом:

Тип ("5", true) вернет int

тип ("3.7", true) вернет float

тип("500") вернет строку

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

Edit

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

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" возвращается в случае float.

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. вставьте все это в массив / ассоциативный массив.
  2. json_encode($your_array, JSON_NUMERIC_CHECK ); дополнительно декодировать его обратно
  3. ?
  4. профит!

Comments

    Ничего не найдено.