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

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

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

Ответ 1

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

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

Ответ 2

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

  • Передача строк в числовые примитивные типы данных:

    $num = (int) "10";
    $num = (double) "10.12"; // same as (float) "10.12";
    
  • Выполните математические операции над строками:

    $num = "10" + 1;
    $num = floor("10.1");
    
  • Используйте intval() или floatval():

    $num = intval("10");
    $num = floatval("10.1");
    
  • Используйте settype().

Ответ 3

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

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

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

Ответ 4

Чтобы избежать проблем, попробуйте 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
?>

Ответ 5

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

(int)(your value);

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

intval(string)

Ответ 6

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

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

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

Ответ 7

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

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

См. Тип Жонглирование.

Ответ 8

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

Ответ 9

Вместо того, чтобы выбирать, преобразовывать ли string в int или float, вы можете просто добавить к ней 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

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

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

Ответ 11

Небольшое примечание к ответам, которые могут быть полезными и безопасными в некоторых случаях. Вы можете проверить, действительно ли строка содержит действительное числовое значение и только затем преобразовать его в числовой тип (например, если вам нужно манипулировать данными, поступающими из db, который преобразует 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

Ответ 12

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

Ответ 13

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

Он также возвращает сокращенные версии логических, целых, двойных и реальных.

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" ) вернет строку

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

Edit

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

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

Ответ 14

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

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

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

Ответ 15

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

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

Ответ 16

В дополнение к ответу Бойкодева я предлагаю следующее:

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

Ответ 17

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

Арифметические операторы

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

$a = +$a;

Ответ 18

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

Ответ 19

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

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

Ответ 20

$a = "10";

$b = (int)$a;

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

Ответ 21

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

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

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

<?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
?>

Ответ 23

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

Ответ 24

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

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

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

Ответ 25

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

$number = "1.234";

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

settype($number , "float");

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

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

Документация по PHP

Ответ 26

Все предложения теряют числовой тип.

Это кажется мне лучшей практикой:

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

Ответ 27

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

Ответ 28

Есть выход:

$value = json_decode(json_encode($value, JSON_NUMERIC_CHECK|JSON_PRESERVE_ZERO_FRACTION|JSON_UNESCAPED_SLASHES), true);

Использование is_* не сработает, поскольку variable является string.

Используя комбинацию 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)

Ответ 29

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

Наиболее одобренный ответ предлагает сделать следующее:

$str = "3.14"
$intstr = (int)$str // now it 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 оценивается как ложное, а "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 как строки преобразуются в соответствующие числа

Ответ 30

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