Как мне преобразовать строку в число в PHP? - PullRequest
545 голосов
/ 16 декабря 2011

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

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

Ответы [ 25 ]

840 голосов
/ 16 декабря 2011

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

$num = "3.14";
$int = (int)$num;
$float = (float)$num;
137 голосов
/ 16 декабря 2011

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

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

44 голосов
/ 16 декабря 2011

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

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

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

40 голосов
/ 02 июня 2014

Во избежание проблем попробуйте 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
?>
22 голосов
/ 16 декабря 2011

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

(int)(your value);

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

intval(string)
17 голосов
/ 15 сентября 2014

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

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

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

13 голосов
/ 18 июля 2016

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

Input             Output
'2' + 0           2 (int)
'2.34' + 0        2.34 (float)
'0.3454545' + 0   0.3454545 (float)
12 голосов
/ 16 декабря 2011

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

12 голосов
/ 03 июня 2015

Вместо того, чтобы выбирать, следует ли преобразовывать 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 голосов
/ 10 августа 2013

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

$a = "whatever"; // any variable

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