Por exemplo, tenho a variável 3.545555555, que gostaria de truncar para apenas 3,54.
java
double
truncate
decimalformat
Johnny
fonte
fonte
Respostas:
Se você quiser isso para fins de exibição, use
java.text.DecimalFormat
:Se você precisar dele para cálculos, use
java.lang.Math
:fonte
floor
para truncar funciona apenas para valores positivos.RoundingMode.DOWN
comoRoudingMode.FLOOR
sempre, em volta do infinito negativo.Verifique disponíveis
RoundingMode
eDecimalFormat
.fonte
DOWN
isso realmente tem o efeito de truncamento para números positivos e negativos. Conforme visto na tabela de exemplos do documento .Fórum pouco antigo, nenhuma das respostas acima funcionou para valores positivos e negativos (quero dizer para o cálculo e apenas para fazer truncar sem arredondamento). Do link Como arredondar um número para n casas decimais em Java
Este método funcionou bem para mim.
Resultados :
fonte
Observe primeiro que a
double
é uma fração binária e realmente não tem casas decimais.Se precisar de casas decimais, use a
BigDecimal
, que tem umsetScale()
método para truncamento, ou useDecimalFormat
para obter aString
.fonte
Se, por qualquer motivo, você não quiser usar um,
BigDecimal
pode transmitir seudouble
para umint
para truncá-lo.Se você deseja truncar o Ones lugar:
int
Para o lugar Décimo :
int
double
centésimos lugar
Exemplo:
Neste exemplo,
decimalPlaces
seria o número de casas APÓS as unidades que você deseja ir, então 1 arredondaria para a décima casa , 2 para as centésimas , e assim por diante (0 arredondaria para a casa das unidades e um negativo para as dezenas , etc.)fonte
unroundedNumber
forem grandes o suficiente. Pode funcionar para o exemplo em questão, mas uma solução geral deve funcionar para qualquer umdouble
.A formatação como uma string e a conversão de volta para o dobro, acho que lhe dará o resultado desejado.
O valor duplo não será redondo (), piso () ou teto ().
Uma solução rápida para isso poderia ser:
Você pode usar o sValue para fins de exibição ou o newValue para cálculos.
fonte
Talvez
Math.floor(value * 100) / 100
? Esteja ciente de que os valores como3.54
podem não ser representados exatamente com umdouble
.fonte
Você pode usar o objeto NumberFormat Class para realizar a tarefa.
fonte
3,545555555 para obter 3,54. Tente seguir para isso:
Isso dará = 3,54!
fonte
Aqui está o método que uso:
Isso também pode ser feito:
fonte
Talvez seguindo:
fonte
Uma verificação rápida é usar o método Math.floor. Criei um método para verificar duas vezes ou menos casas decimais abaixo:
fonte
Eu tenho uma versão ligeiramente modificada do Mani .
Resultado:
fonte
Isso funcionou para mim:
Eu pessoalmente gosto desta versão porque ela realmente executa o arredondamento numericamente, ao invés de convertê-la em uma String (ou similar) e então formatá-la.
fonte
bem, isso pode ser um pouco estranho, mas acho que pode resolver o seu problema :)
fonte