Eu preciso formatar um float para "n" casas decimais.
estava tentando BigDecimal, mas o valor de retorno não está correto ...
public static float Redondear(float pNumero, int pCantidadDecimales) {
// the function is call with the values Redondear(625.3f, 2)
BigDecimal value = new BigDecimal(pNumero);
value = value.setScale(pCantidadDecimales, RoundingMode.HALF_EVEN); // here the value is correct (625.30)
return value.floatValue(); // but here the values is 625.3
}
Preciso retornar um valor flutuante com o número de casas decimais que eu especificar.
Preciso de Float
retorno de valor nãoDouble
.
String.format(java.util.Locale.US,"%.2f", floatValue);
Dê uma olhada em DecimalFormat . Você pode usá-lo facilmente para pegar um número e atribuir um número definido de casas decimais.
Editar : Exemplo
fonte
DecimalFormat
construtor é desencorajado; veja minha resposta para um uso correto deNumberFormat
.Tente isso, isso me ajudou muito
O resultado será final da RodadaPreço -> 5652.26
fonte
De notar, o uso do
DecimalFormat
construtor é desencorajado. O javadoc para esta classe declara:https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html
Então, o que você precisa fazer é (por exemplo):
fonte
Aqui está uma amostra rápida usando a
DecimalFormat
classe mencionada por Nick.A saída da declaração de impressão será 12.35. Observe que o arredondará para você.
fonte
DecimalFormat
construtor é desencorajado; veja minha resposta para um uso correto deNumberFormat
.Meio surpreso que ninguém apontou o caminho direto para fazê-lo, o que é bastante fácil.
Certamente, isso não faz o arredondamento pela metade.
Pelo que vale, o arredondamento semi-uniforme será caótico e imprevisível sempre que você misturar valores de ponto flutuante baseados em binário com aritmética da base 10. Tenho certeza que isso não pode ser feito. O problema básico é que um valor como 1.105 não pode ser representado exatamente no ponto flutuante. O valor do ponto flutuante será algo como 1.105000000000001 ou 1.104999999999999. Portanto, qualquer tentativa de realizar arredondamentos semitransparentes ocorre com erros de codificação representacional.
As implementações de ponto flutuante IEEE farão meio arredondamento, mas farão meio arredondamento binário, não arredondamento decimal. Então você provavelmente está bem
fonte
pow
é uma operação muito cara para usar no arredondamento?fonte
Essa é uma maneira muito menos profissional e muito mais cara, mas deve ser mais fácil de entender e mais útil para iniciantes.
fonte
Eu acho que o que você quer é
e use o valor de retorno para exibir.
sempre retornará 625,3 porque é usado principalmente para calcular algo.
fonte
Eu estava procurando uma resposta para esta pergunta e depois desenvolvi um método! :) Um aviso justo, está arredondando o valor.
fonte