Qual é a maneira correta de arredondar uma string PHP para duas casas decimais?
$number = "520"; // It's a string from a database
$formatted_number = round_to_2dp($number);
echo $formatted_number;
A saída deve ser 520.00
;
Como deve round_to_2dp()
ser a definição da função?
php
formatting
numbers
rounding
number-formatting
Rich Bradshaw
fonte
fonte
round
é uma função matemática, e este é apenas um problema de formatação.Respostas:
Você pode usar number_format () :
Exemplo:
Esta função retorna uma string .
fonte
round
não resolve o problema do OP aqui.round("520", 2)
retorna o float520
e ecoando que obviamente não o mostrará com duas casas decimais. Para o objetivo do OP - mostrar um número inteiro com duas casas decimais preenchendo-o com zeros à direita - você precisa de uma função de formatação de números, não de arredondamento.520,00
vez disso520.00
, isso simplesmente funciona.Use
round()
(use se você está esperando um número apenas no formato float, caso contrário, use number_format () como resposta dada por Codemwnci ):Do manual:
...
fonte
round($number, 2);
não funciona. Quero 520,00 e não 520. Não posso acreditar que a rodada não faça isso por padrão.Alternativamente,
fonte
520,00
? Eu acho que a outra resposta funciona melhor nesse caso.http://php.net/manual/en/function.round.php
por exemplo
fonte
Tentar:
A saída será:
fonte
Você pode usar o PHP
printf
ousprintf
funções:Exemplo com
sprintf
:Você pode executar o mesmo sem
echo
também. Exemplo:sprintf("%.3f", $num);
Resultado:
Alternativamente, com
printf
:Resultado:
fonte
Outra maneira mais exótica de resolver esse problema é usar
bcadd()
com um valor fictício para o $ right_operand de0
.fonte
bc*
funções não arredondam para cima, elas sempre arredondam para baixo. Por exemplo,bcadd("1.0999","0.0",1)
gera "1.0", não "1.1".$scale
dígitos fracionários. Isso é igual ao arredondamento para zero.Use o PHP number_format ()função .
Por exemplo,
A saída será:
fonte
Use a função number_format () do PHP .
fonte
Isso exibirá exatamente dois dígitos após o ponto decimal.
Vantagem:
Se você deseja exibir dois dígitos somente após um valor flutuante e não para int, use-o.
fonte
round_to_2dp
é uma função definida pelo usuário e nada pode ser feito a menos que você tenha postado a declaração dessa função.No entanto, meu palpite é fazer isso:
number_format($number, 2);
fonte
round_to_2dp($number);
foi concebido como pseudocódigo; o OP estava pedindo para alguém lhe dizer com o que substituir essa expressão.O arredondamento arredonda corretamente o número e o sprintf o força a 2 casas decimais, se houver apenas 1 casa decimal após o arredondamento.
fonte
Ele retornará 5,98 sem arredondar o número.
fonte
floor($retailPrice * 100) / 100;
sem necessidade de formato numérico.Para arredondamento condicional, ie. mostrar decimal onde é realmente necessário, caso contrário, número inteiro
123,56 => 12,56
123,00 => 123
fonte
Eu faço o meu.
fonte
Aqui recebo duas casas decimais após o
.
(ponto) usando uma função ...Resultados da função acima:
Nova resposta correta
Use a função nativa do PHP bcdiv
fonte
Isso fornecerá 2 números após o decimal.
fonte
Se você quiser usar dois dígitos decimais em todo o projeto, poderá definir:
Em seguida, a seguinte função produzirá o resultado desejado:
Mas se você não usar a função bcscale, precisará escrever o código da seguinte maneira para obter o resultado desejado.
Para saber mais
BC Math Functions
bcscale
fonte
Número sem ronda
fonte
Aqui está outra solução com strtok e str_pad :
fonte
Adicionando a outras respostas, como number_format (), por padrão, adicionará milhares de separadores.
Para remover isso, faça o seguinte:
fonte
Exemplos
fonte
Você pode usar a função PHP round () .
fonte