Eu preciso dos seguintes resultados
100.12 -> 100.00
100.44 -> 100.00
100.50 -> 101.00
100.75 -> 101.00
.round()
ou .setScale()
? Como faço isso?
java
rounding
bigdecimal
n / D
fonte
fonte
BigDecimal bd1 = new BigDecimal(100.12); BigDecimal bd2 = bd1.setScale(0, RoundingMode.HALF_UP); System.out.println(bd1.equals(bd2));
imprime falsoRoundingMode
o que é isso? ÉBigDecimal
Se eu for pela resposta de Grodriguez
Esta é a saída
O que não é bem o que eu quero, então acabei fazendo isso ..
Isso é o que eu recebo
Isso resolve meu problema por agora .. :) Obrigado a todos.
fonte
DecimalFormat
(como emnew DecimalFormat("###.00")
) para gerenciar a conversão de umaBigDecimal
string de volta em. Ele fornece"101.00"
o resultado para ambos os valores que os snippets de @Grodriquez e você criaram.Esta é uma solução terrivelmente complicada, mas funciona:
Código de teste:
Resultado:
fonte
input.toBigInteger().toString().length()
parte seria muito mais eficiente usando um logaritmo, algo comoround_up(log(input)) + (1 if input is a power of ten, else 0)
Basta olhar para:
http://download.oracle.com/javase/6/docs/api/java/math/BigDecimal.html#ROUND_HALF_UP
e:
Ou se estiver usando Java 6, então
http://download.oracle.com/javase/6/docs/api/java/math/RoundingMode.html#HALF_UP
http://download.oracle.com/javase/6/docs/api/java/math/MathContext.html
e também:
fonte
Eu não acho que você pode contornar isso com um único comando. Experimentar
Testei o restante de seus exemplos e ele retorna os valores desejados, mas não garanto sua correção.
fonte
Você quer
fonte
round
: "Se a configuração de precisão for 0, então nenhum arredondamento ocorrerá."