Estou tentando encontrar uma maneira rápida de remover zero decimals
dos valores numéricos como este:
echo cleanNumber('125.00');
// 125
echo cleanNumber('966.70');
// 966.7
echo cleanNumber(844.011);
// 844.011
Existe alguma maneira otimizada de fazer isso?
Respostas:
$num + 0
faz o truque.Internamente, isso equivale a transmitir para flutuar com
(float)$num
ou,floatval($num)
mas acho mais simples.fonte
floatval()
está fazendo.floatval
O comportamento do @ESCOBAR está retornando um float. Eu diria que usá-lo como um formatador de decimais também não é muito óbvio ou limpo.//COMMENT
você poderia apenas usar a
floatval
funçãofonte
Isto é o que eu uso:
NB Isso assume que
.
é o separador decimal. Ele tem a vantagem de funcionar em números arbitrariamente grandes (ou pequenos), pois não há vazamento flutuante. Também não transformará números em notação científica (por exemplo, 1.0E-17).fonte
Simplesmente adicionar
+
à sua variável string fará com que o typecast seja (float) e remova zeros:fonte
Para todos que vêm a este site com o mesmo problema com vírgulas, altere:
para:
Se houver dois zeros a serem removidos, altere para:
Mais aqui: Número PHP: ponto decimal visível apenas se necessário
fonte
Se você deseja remover os dígitos zero antes de exibir na página ou no modelo.
Você pode usar a função sprintf ()
fonte
Você deve converter seus números como carros alegóricos, o que fará isso por você.
A saída disso será o que você está procurando.
fonte
(float)'0.1234567890124567890123456789'
torna-se0.12345678901246
.Não há nada que não possa ser corrigido com uma simples expressão regular;)
http://xkcd.com/208/
fonte
0
s significativos , como em"100"
. Também falha em retirar0
s"100.010"
.$x = preg_replace("/(\.0*$)|((?<=\.\d*)0+$)/",'',$x);
Typecast para a
float
.fonte
Devido a esta pergunta é antiga. Primeiro, me desculpe por isso.
A pergunta é sobre o número xxx.xx, mas, no caso de ser x, xxx.xxxxx ou separador decimal com diferença como xxxx, xxxx, pode ser mais difícil encontrar e remover dígitos zero do valor decimal.
E aqui está o código para teste.
fonte
Tenha cuidado ao adicionar +0.
O resultado é 1.
fonte
Estranho, quando obtenho um número fora do banco de dados com um tipo "float" e se meu número é ex. 10000 quando eu flutuo, torna-se 1.
Testei todas as soluções acima, mas não funcionou.
fonte
fonte
Maneira complicada, mas funciona:
as soluções acima são a melhor maneira, mas se você quiser ter o seu próprio, poderá usá-lo. O que esse algoritmo faz: começa no final da string e verifica se é 0 , se for definido como string vazia e depois vai para o próximo caractere de volta até que o último caractere seja > 0
fonte
Você pode usar:
fonte
Essa é a minha pequena solução ... Pode ser incluída em uma classe e definir vários
private $ dsepparator = '.'; // casas decimais private $ tsepparator = ','; // mil
Isso pode ser definido pelo construtor e alterado para o idioma dos usuários.
fonte
Esta é a minha solução. Eu quero manter a capacidade de adicionar separador de milhares
fonte
Esta é uma função simples de uma linha usando rtrim, salve o separador e o ponto decimal:
fonte
Eu encontrei esta solução é a melhor:
fonte
Simples e preciso!
fonte
Solução definitiva: a única maneira segura é usar o regex:
funcionará para qualquer caso
fonte
O seguinte é muito mais simples
fonte
fonte
Este código removerá zero após o ponto e retornará apenas dois dígitos decimais.
$ número = 1200.0000;
str_replace ('. 00', '', number_format ($ número, 2, '.', ''));
A saída será: 1200
fonte