1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Porque RoundingMode.HALF_DOWN está arredondando para cima quando encontra um 5?

Ao executar o programa abaixo e inserir o valor 6 na entrada, notei que que há um erro de arredondamento na segunda casa decimal, no 5º e 6º termo impresso. Ora, com precisão de três casas decimais, 5/9=0.555 e 6/11=0.545 no entanto o método arredonda para 0.56 e 0.55 respectivamente, como se eu estivesse usando HALF_UP! Grato se alguém pudesse me ajudar com essa questão.

Adicionalmente, tenho outra dúvida: toda vez que eu precisar mudar o valor da variável "escala", tenho de mudar manualmente os especificadores de formatos referentes aos números que mudei a precisão. Por exemplo, se eu mudasse a escala de 2 para 3, teria de mudar os especificadores de %.2f para %.3f alguma dica para resolver isso?

import java.util.Scanner; 
import java.math.BigDecimal; 
import java.math.RoundingMode; 

public class Teste 
{ 
    static Scanner ler; 

    public static void main(String[] args) 
    { 
        ler = new Scanner(System.in); 
        BigDecimal dividendo = new BigDecimal("1");
        BigDecimal divisor = new BigDecimal("1");
        BigDecimal resultado;
        int quantidade, numerador=1, denominador=1, escala=2;

        System.out.printf("\nInsira a quantidade de termos que deseja imprimir: ");
        quantidade = ler.nextInt();

        resultado = dividendo.divide(divisor, escala, RoundingMode.HALF_DOWN);
        System.out.printf("\n%d/%d=%.2f\n", numerador, denominador, resultado);

        for (numerador = 2; numerador <= quantidade; numerador++) 
        {
            dividendo = new BigDecimal(String.valueOf(numerador));
            denominador = numerador * 2 - 1;
            divisor = new BigDecimal(String.valueOf(denominador));
            resultado = dividendo.divide(divisor, escala, RoundingMode.HALF_DOWN);
            System.out.printf("%d/%d=%.2f\n", numerador, denominador, resultado);
        } 
    } 
}
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags arredondamento ou faça a sua própria pergunta.