it-swarm-pt.tech

Como faço para converter uma string para um número em PHP?

Eu quero converter esses tipos de valores, '3', '2.34', '0.234343', etc. para um número. Em JavaScript podemos usar Number(), mas existe algum método similar disponível em PHP?

Input             Output
'2'               2
'2.34'            2.34
'0.3454545'       0.3454545
535
Sara

Você normalmente não precisa fazer isso, já que PHP irá coagir o tipo para você na maioria das circunstâncias. Para situações em que você deseja converter explicitamente o tipo, elenco ele:

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

Existem algumas maneiras de fazer isso:

  1. Transmita as cadeias para tipos de dados primitivos numéricos:

    $num = (int) "10";
    $num = (double) "10.12"; // same as (float) "10.12";
    
  2. Execute operações matemáticas nas strings:

    $num = "10" + 1;
    $num = floor("10.1");
    
  3. Use intval() ou floatval() :

    $num = intval("10");
    $num = floatval("10.1");
    
  4. Use settype() .

135
fardjad

Em qualquer linguagem (fracamente tipada) você sempre pode lançar uma string para um número adicionando um zero a ela.

No entanto, há muito pouco sentido nisso, já que PHP irá fazê-lo automaticamente no momento de usar esta variável, e será convertido para uma string de qualquer maneira no momento da saída.

Note que você pode querer manter os números pontilhados como strings, porque depois de lançar para flutuar, pode ser alterado de forma imprevisível, devido à natureza dos números flutuantes.

45
Your Common Sense

Para evitar problemas, tente intval($var) . Alguns exemplos:

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

Você pode usar:

(int)(your value);

Ou você pode usar:

intval(string)
22
noobie-php

Se você quiser obter um float para $value = '0.4', mas int para $value = '4', você pode escrever:

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

Está um pouco sujo, mas funciona.

17
Aleksei Akireikin

Você pode usar (int)_value_ por exemplo.

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

Veja tipo malabarismo .

14
Elbert Labasano

Em PHP você pode usar intval(string) or floatval(string) funções para converter strings em números.

12
Kashif Khan

Em vez de ter que escolher se deseja converter o string para int ou float, você pode simplesmente adicionar um 0 a ele, e PHP irá converter automaticamente o resultado para um tipo numérico.

// 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;
12
webNeat

Você sempre pode adicionar zero a ele!

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

Apenas uma pequena nota para as respostas que podem ser úteis e seguras em alguns casos. Você pode querer verificar se a string realmente contém um valor numérico válido primeiro e só então convertê-lo para um tipo numérico (por exemplo, se você tiver que manipular dados vindos de um banco de dados que converta ints em strings). Você pode usar is_numeric() e floatval():

$a = "whatever"; // any variable

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

Aqui está a função que alcança o que você está procurando. Primeiro verificamos se o valor pode ser entendido como um número, se assim formos transformamos em um int e um float. Se int e float são os mesmos (por exemplo, 5 == 5.0), então retornamos o valor int. Se o int e o float não são os mesmos (por exemplo, 5! = 5.3), então assumimos que você precisa da precisão do float e retorna esse valor. Se o valor não for numérico, lançamos um aviso e retornamos 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;
    }
}
9
CogSciGradStudent

Aqui está uma função que escrevi para simplificar as coisas para mim:

Também retorna versões abreviadas de booleano, inteiro, duplo e 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;
    }
}

O tipo de chamada com parseNumeric definido como true converterá cadeias numéricas antes de marcar o tipo.

Portanto:

type ("5", true) retornará int

type ("3.7", true) retornará float

type ("500") retornará string

Apenas tome cuidado, pois este é um tipo de método de verificação falsa e sua variável real ainda será uma string. Você precisará converter a variável real para o tipo correto, se necessário. Eu só precisava verificar se o banco de dados deve carregar um id de item ou um alias, não tendo, portanto, nenhum efeito inesperado, pois ele será analisado como string no tempo de execução de qualquer maneira.

Editar

Se você gostaria de detectar se objetos são funções, adicione este caso ao switch:

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

Além de resposta de Boykodev eu sugiro isso:

Input             Output
'2' * 1           2 (int)
'2.34' * 1        2.34 (float)
'0.3454545' * 1   0.3454545 (float)
6
drugan
    $num = "3.14";
    $int = (int)$num; // Output = 3
    $float = (float)$num; // Output = 3.14
    $double = (double)$num; // Output = 3.14

Você pode converter uma string em um número em PHP usando um elenco.

6
Sandun Harshana

Descobri que, em JavaScript, uma maneira simples de converter uma string em um número é multiplicá-la por 1. Ela resolve o problema de concatenação, porque o símbolo "+" tem vários usos em JavaScript, enquanto o símbolo "*" é puramente para multiplicação matemática.

Baseado no que eu vi aqui com relação a PHP automaticamente estando disposto a interpretar uma string contendo um dígito como um número (e os comentários sobre adição, já que em PHP o "+" é puramente para adição matemática), este truque de multiplicação funciona muito bem para PHP, também.

Eu testei, e ele funciona ... Embora dependendo de como você adquiriu a string, você pode querer aplicar a função trim () a ela, antes de multiplicar por 1.

6
vernonner3voltazim

Sim, existe um método similar no PHP, mas é tão pouco conhecido que você raramente ouvirá sobre isso. É um operador aritmético chamado " identidade ", como descrito aqui:

operadores aritméticos

Para converter uma string numérica em um número, faça o seguinte:

$a = +$a;
6
aldemarcalazans

Simplesmente você pode escrever assim:

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

Você pode simplesmente usar a função intval() para converter uma string em um int.

5
Codemaker
$a = "10";

$b = (int)$a;

Você pode usar isso para converter uma string em um int em PHP .

4
Pritom

Tente usar algo assim:

<?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
?>
4
Nikhil Jaitak

Você pode usar:

((int) $var)   ( but in big number it return 2147483647 :-) )

Mas a melhor solução é usar:

if (is_numeric($var))
    $var = (isset($var)) ? $var : 0;
else
    $var = 0;

Ou

if (is_numeric($var))
    $var = (trim($var) == '') ? 0 : $var;
else
    $var = 0;
4
Mehdi Ajdari

Para o seu caso específico, você poderia simplesmente multiplicar por 1 para converter uma string em um número em PHP. PHP cuida do flutuante e inteiro automaticamente.

$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)
3
Haktan Suren

PHP fará isso por você dentro dos limites

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

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

Você pode alterar o tipo de dados da seguinte forma

$number = "1.234";

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

settype($number , "float");

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

Por razões históricas, "double" é retornado no caso de um float.

Documentação PHP

2
David Lozano

Todas as sugestões perdem o tipo numérico.

Isso parece-me uma boa prática:

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";
}
2
Rocco Galasso

Eu tenho a pergunta "digamos que você estava escrevendo a função interna para converter um inteiro em uma string em PHP, como você escreveria essa função" em uma entrevista de programação. Aqui está uma solução.

$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);
0
Brendan

Tem jeito:

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

O uso de is_* não funcionará, pois o variable é um: string.

Usando a combinação de json_encode() e json_decode(), ele é convertido para o formato "true". Se é um verdadeiro string, então seria uma saída errada.

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

var_dump($num, $int, $float);

A saída será: string(2) "Me" int(0) float(0)

0
Anuga

Eu tenho lido as respostas e não vi ninguém mencionar a maior limitação na conversão do número do PHP.

A resposta mais votada sugere fazer o seguinte:

$str = "3.14"
$intstr = (int)$str // now it's a number equal to 3

Isso é brilhante. PHP faz casting direto. Mas e se fizéssemos o seguinte?

$str = "3.14is_trash"
$intstr = (int)$str

O PHP considera tais conversões válidas?

Aparentemente sim .

O PHP lê a string até encontrar o primeiro caractere não numérico para o tipo requerido. O que significa que, para números inteiros, os caracteres numéricos são [0-9]. Como resultado, ele lê 3, já que está no intervalo [0-9], continua lendo. Lê . e pára ali, pois não está no intervalo [0-9].

O mesmo aconteceria se você fosse lançar para flutuar ou dobrar. PHP leria 3, ., 1, 4, e pararia em i, já que não é um caractere numérico flutuante válido.

Como resultado, "million" >= 1000000 é avaliado como falso, mas "1000000million" >= 1000000 é avaliado como true.

Veja também:

https://www.php.net/manual/en/language.operators.comparison.php como as conversões são feitas ao comparar

https://www.php.net/manual/en/language.types.string.php#language.types.string.conversion como as strings são convertidas para os respectivos números

0
Dragas