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?

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top