Arredondando metade para cima com formato decimal no Android
Pergunta
Quero definir o modo de arredondamento como Half_Up no meu DecimalFormat, mas o Eclipse está me dizendo que o setRoundingMode () não está disponível na classe Decimalformat. As propriedades do meu projeto (e as propriedades gerais do eclipse) estão usando o compilador 1.6. O site Developer.android.com diz que eu posso usar o Java 5 ou 6, por isso não tenho certeza de qual é o problema.
import java.math.RoundingMode;
import java.text.DecimalFormat;
completEdValueFormatter = numberFormat.getNumberInstance (); Decimalformat concluídoDecimalformat = (decimalformat) completeDValueFormatter; completedDecimalformat.setRoundingMode (RoundingMode.half_up);
Também tentei usar as ferramentas Android para gerar um projeto baseado em formigas, tentei esse código no projeto e também obtive o mesmo erro de compilação. Portanto, não parece estar relacionado ao eclipse. Parece relacionado à API Android.
Alguma sugestão?
Solução
Isso não responde realmente por que eu não posso usar o método Java 6 .SetRoundingMode (RoundingMode) no DecimalFormat, mas é pelo menos uma subida.
int numDigitsToShow = this.completedValueFormatter.getMaximumFractionDigits();
BigDecimal bigDecimal = new BigDecimal(valueToBeRounded);
BigDecimal roundedBigDecimal = bigDecimal.setScale(numDigitsToShow, RoundingMode.HALF_UP);
return this.completedValueFormatter.format(roundedBigDecimal.doubleValue());
Eu crio um bigdecimal com o valor que preciso arredondar, depois recebo um BigDecimal desse valor com a escala definida com o número de dígitos para os quais preciso arredondar meus valores. Em seguida, passo esse valor arredondado para o meu número de número original para conversão em string.
Se alguém tiver uma solução melhor, eu sou todos ouvidos!
Outras dicas
Aqui está o que eu suspeito que o problema é (supondo que estou lendo os documentos corretamente) e é um doozy:
De acordo com a documentação da API java.text.decimalformat, você não está realmente obtendo a implementação do tempo de execução do Java 1.6 RE, mas está recebendo uma "versão aprimorada" do Android que claramente não inclui o SetRoundingMode, que morde francamente.
"Esta é uma versão aprimorada do DecimalFormat que é baseada na versão padrão no RI. A funcionalidade nova ou alterada é rotulada de novo".
Uma fraqueza em Java por muitos anos tem sido a classe Decimalformat, inadimplente para Half_Round_Up e não teve como mudar isso, até a JVM 1.6. A pena ver o Android está mantendo essa necessidade de Kludge viva.
Parece que estamos presos nas configurações de escala BigDecimal para formatar a saída em todo o aplicativo que precisa, em vez de simplesmente poder confiar em uma chamada de formatamento sozinha para fazer o trabalho. Não é o fim do mundo, mas muito decepcionante Google.
É claro que o mesmo documento diz que o SetRondingMode () funciona, então talvez este seja um bug completo?
Eu acho que essa seria a melhor opçãohttp://download.oracle.com/javase/1.4.2/docs/api/java/lang/math.html#ceil(double)