2013-05-17 3 views
7

Я ищу функцию, которая будет отличать числовую строку в виде целого или плавающего типа в зависимости от содержимого строки, например. «1.23» -> float 1.23, «123» -> int 123.Строка string или int или float

Я знаю, что могу использовать if-s с is_int, is_float и применять к соответствующим типам - но, может быть, есть функция, которая сделает это автоматически?

ответ

22

Нет, функция не обеспечивает автоматический приведение в действие. Однако вы можете бросить с этой простой хак (литая автоматически производится PHP во внутренней):

$int = "123"+0; 
$float = "1.23"+0; 

для общего числа:

$yourNumberCasted = $yourStringNumber + 0; 

С функцией:

function castToNumber($genericStringNumber) { 
    return $genericStringNumber+0; 
} 
$yourNumberCasted = castToNumber($yourStringNumber); 
+0

Это очень интересное решение. Я думал о маршруте «тройной if», чтобы обнаружить наличие «.», А затем используя '(int)' или '(float)'. У вас очень элегантное решение, но я бы склонен комментировать код, поскольку для читателя это не очевидно, что он делает. –

+2

Если вы предпочитаете, вы можете создать функцию с названием «castToNumber». 'function castToNumber ($ genericStringNumber) {return $ genericStringNumber + 0; } ' – antoox

+0

Имейте в виду, что очень большие целые числа будут преобразованы в float при использовании этого метода, в зависимости от настройки PHP_INT_MAX для вашей системы. – Rogier

-1

Там представляет собой функцию intval(), которая делает почти то же самое, что и тип-литье, упомянутое в других ответах, однако оно не может использоваться на объектах.

Также имеющие такую ​​же функциональность: boolval() и floatval().

+0

Я не хочу, чтобы int - но int или float. – ducin

+0

Итак, используйте трюк с добавлением '0' (или умножением на' 1'). – Voitcus

3

Для этого нет встроенной функции, но вы можете создать свой собственный быстро.

function castNumber($n) 
{ 
    if(!is_numeric($n)) return 0; 
    return (is_float($n)) ? (float) $n : (int) $n; 
} 

и использовать его:

$casted = castNumber($num_to_cast); 
+0

более или менее, это то, что у меня есть. Я просто надеялся, что есть что-то вроде этого встроенного. – ducin

+0

У меня всегда есть файл Utils.php, где я добавляю такие функции, когда нет встроенных функций для того, что я хочу, а затем повторно использую его в своих приложениях – letiagoalves

+0

так же, как underscore.js для javascript;) – ducin

0

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

$i = "1.23";  
echo $c = (double)$i; // will return 1.23 

$i = "123";  
echo $c = (double)$i; // will return 123 
Смежные вопросы