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 semelhante disponível em PHP?
Input Output
'2' 2
'2.34' 2.34
'0.3454545' 0.3454545
php
casting
type-conversion
Sara
fonte
fonte
Respostas:
Você normalmente não precisa fazer isso, pois o PHP coagirá o tipo para você na maioria das circunstâncias. Para situações em que você deseja converter explicitamente o tipo, lançou -lo:
fonte
.
é o separador de ponto decimal. pt.wikipedia.org/wiki/…Existem algumas maneiras de fazer isso:
Transmitir as strings para tipos de dados numéricos primitivos:
Execute operações matemáticas nas seqüências de caracteres:
Use
intval()
oufloatval()
:Use
settype()
.fonte
(double)
é apenas um alias para(float)
.$num = "10" + 1
exemplo).intval("9999999999")==2147483647
.intval
é útil porque você pode usá-lo noarray_map('intval', $arrayOfStrings);
qual não pode fazer a transmissão.$num = "10" + 1;
ser melhor usar,$num = "10" * 1;
uma vez que isso não altera o valor (elemento neutro da multiplicação), isso é basicamente algo semelhante,toNumber(..)
já que o tipo final será determinado pelo que é necessário para converter a string "10" -> (int) 10; "10,1" -> (flutuante) 10,1;Para evitar problemas, tente
intval($var)
. Alguns exemplos:fonte
12.7896
?(int)$my_str
isso não funcionaria, pois estava lidando especificamente com strings liks01
e013
que eu queria interpretar como base 10 ... Então, eu queria uma maneira de fornecer explicitamente a base.Em qualquer idioma (de tipo fraco), você sempre pode converter uma string em um número adicionando zero a ela.
No entanto, há muito pouco sentido nisso, pois o PHP fará isso automaticamente no momento do uso dessa variável e será convertido para uma string de qualquer maneira no momento da saída.
Observe que você pode manter os números pontilhados como seqüências de caracteres, porque após a conversão para flutuação, ela pode ser alterada imprevisivelmente, devido à natureza dos números flutuantes.
fonte
typeof('123'+0)
dá'string'
, porque'123'+0
dá'1230'
.0+'123'
para obter123
Você pode usar:
Ou você pode usar:
fonte
is_float
e, se isso passar, depois converta para with em(float)
vez de(int)
.Se você deseja obter um float para
$value = '0.4'
, mas int for$value = '4'
, você pode escrever:Está um pouco sujo, mas funciona.
fonte
strpos($val, '.') === false ? intval($val) : floatval($val);
localeconv()['decimal_point']
vez de'.'
. Uma vantagem dastrpos
solução é que ela é quase duas vezes mais rápida que a transmissão duas vezes.2.1e2
, tem ponto decimal, mas o número resultante é inteiro #+
operador de identidade:,var_dump(+'0.4', +'4')
fornece um float e um int. php.net/manual/en/language.operators.arithmetic.phpVocê sempre pode adicionar zero a ele!
fonte
A non well formed numeric value encountered
. qualquer ideia?Em vez de escolher entre converter
string
paraint
oufloat
, você pode simplesmente adicionar um0
a ele, e o PHP converterá automaticamente o resultado em um tipo numérico.fonte
No PHP, você pode usar
intval(string) or floatval(string)
funções para converter seqüências de caracteres em números.fonte
Sim, existe um método semelhante no PHP, mas é tão pouco conhecido que você raramente ouvirá sobre ele. É um operador aritmético chamado " identidade ", conforme descrito aqui:
Operadores aritméticos
Para converter uma sequência numérica em um número, faça o seguinte:
fonte
is_numeric
, para ter um lugar para colocar código para cordas identificador que não pode converter corretamente.)Apenas uma pequena nota para as respostas que podem ser úteis e seguras em alguns casos. Convém verificar se a string realmente contém um valor numérico válido primeiro e somente depois convertê-lo em um tipo numérico (por exemplo, se você precisar manipular dados provenientes de um banco de dados que converte ints em strings). Você pode usar
is_numeric()
e depoisfloatval()
:fonte
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; nesse caso, o transformamos em int e float. Se int e float forem os mesmos (por exemplo, 5 == 5.0), retornaremos o valor int. Se int e float não forem os mesmos (por exemplo, 5! = 5,3), assumimos que você precisa da precisão do float e retornamos esse valor. Se o valor não for numérico, lançamos um aviso e retornamos nulo.
fonte
Descobri que no JavaScript uma maneira simples de converter uma string em um número é multiplicá-la por 1. Ele 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.
Com base no que eu vi aqui sobre o PHP automaticamente querer interpretar uma string contendo dígitos como um número (e os comentários sobre a adição, já que no PHP o "+" é apenas para adição matemática), esse truque de multiplicação funciona muito bem para PHP também.
Eu testei e funciona ... Embora, dependendo de como você adquiriu a string, você pode aplicar a função trim () a ela, antes de multiplicar por 1.
fonte
Aqui está uma função que escrevi para simplificar as coisas para mim:
Ele também retorna versões abreviadas de booleano, inteiro, duplo e real.
O tipo de chamada com parseNumeric definido como true converterá seqüências numéricas antes de verificar o tipo.
Portanto:
type ("5", true) retornará int
type ("3.7", true) retornará float
type ("500") retornará string
Apenas tome cuidado, pois esse é 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 deveria carregar um ID ou um alias de item, sem causar efeitos inesperados, pois ele será analisado como uma string no tempo de execução.
Editar
Se você deseja detectar se objetos são funções, adicione este caso ao comutador:
fonte
Além da resposta de Boykodev, sugiro o seguinte:
fonte
$id_cron = (string)date('YmdHi'); $target_id_cron = $id_cron - 1;
vez de $ target_id_cron = (int) $ id_cron - 1;A non well formed numeric value encountered
quando quero alterar a string para flutuar$num = '12,24' * 1
. Alguma sugestão?Você pode usar isso para converter uma string em um int no PHP .
fonte
Simplesmente você pode escrever assim:
fonte
Apenas multiplique o número por 1 para que a string seja convertida em número do tipo.
fonte
Você pode usar:
Mas a melhor solução é usar:
Ou
fonte
Você pode alterar o tipo de dados da seguinte maneira
Por razões históricas, "double" é retornado em caso de flutuação.
Documentação PHP
fonte
Todas as sugestões perdem o tipo numérico.
Isso me parece uma prática recomendada:
fonte
PHP fará isso por você dentro de limites
fonte
Há uma maneira:
Usar
is_*
não funcionará, pois ovariable
é um:string
.Usando a combinação de
json_encode()
e, em seguida,json_decode()
ele é convertido em sua forma "verdadeira". Se é verdade,string
então seria errado.Saída:
string(2) "Me" int(0) float(0)
fonte
Eu recebi a pergunta "digamos que você estava escrevendo a função interna para converter um número inteiro em uma string no PHP, como você escreveria essa função" em uma entrevista de programação. Aqui está uma solução.
fonte
Eu tenho lido as respostas e não vi ninguém mencionar a maior ressalva na conversão de números do PHP.
A resposta mais votada sugere fazer o seguinte:
Isso é brilhante. PHP faz casting direto. Mas e se fizermos o seguinte?
O PHP considera válidas essas conversões?
Aparentemente sim .
O PHP lê a string até encontrar o primeiro caractere não numérico para o tipo necessário. Significando que para números inteiros, os caracteres numéricos são [0-9]. Como resultado, ele lê
3
, como está no intervalo de [0-9] caracteres, continua lendo. Lê.
e para por aí, pois não está no intervalo [0-9].O mesmo aconteceria se você jogasse para flutuar ou dobrar. O PHP leria
3
, então.
, então1
, então4
, e parava,i
pois não é um caractere numérico flutuante válido.Como resultado,
"million" >= 1000000
avalia como falso, mas"1000000million" >= 1000000
avalia comotrue
.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 nos respectivos números
fonte
Se você não souber antecipadamente se possui um número flutuante ou um número inteiro
e se a sequência pode conter caracteres especiais (como espaço, €, etc),
e se pode conter mais de 1 ponto ou vírgula,
você pode usá-lo função:
fonte
Abordagem diferente:
json_encode($your_array, JSON_NUMERIC_CHECK);
opcionalmente decodificá-lo de voltafonte