Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

java.lang exercicio 9

package Testes;

import java.math.BigDecimal;

public class TestaDoubles {
    public static void main(String[] args) {
        double x1;
        x1 = 9/3.0001;
        System.out.println(x1);

        BigDecimal x2 = new BigDecimal(9);
        BigDecimal x3 = new BigDecimal(3.0001);

        System.out.println(x2.divide(x3));


    }
}

Como utilizo a classe java.math.BigDecimal, tentei desta forma e deu erro na execução da classe

2.999900003333222 Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. at java.math.BigDecimal.divide(Unknown Source) at Testes.TestaDoubles.main(TestaDoubles.java:14)

4 respostas
solução!

Você precisa definir um arredondamento e o número de casas decimais que vc quer =>

System.out.println(x2.divide(x3,5,RoundingMode.HALF_DOWN));
package Testes;

import java.math.BigDecimal;
import java.math.RoundingMode;

public class TestaDoubles {
    public static void main(String[] args) {
        double x1;
        x1 = 9/3.0001;
        System.out.println(x1);

        BigDecimal x2 = new BigDecimal(9);
        BigDecimal x3 = new BigDecimal(3.0001);

        System.out.println(x2.divide(x3,5,RoundingMode.HALF_DOWN));        

    }
}
--
package java.math;

public class BigDecimal {

    public BigDecimal(double numero) {
        // TODO Auto-generated constructor stub
    }

    public char[] divide(char[] x4) {
        // TODO Auto-generated method stub
        return x4;
    }

    public char[] divide(BigDecimal x4, int i, RoundingMode halfDown) {
        // TODO Auto-generated method stub
        return null;
    }


}

O código não esta compilando, apresenta erro em "divide" em sysout

The method divide(char[]) in the type BigDecimal is not applicable for the arguments (BigDecimal, int, RoundingMode)

Opa, por algum motivo vc gerou uma classe chamada BigDecimal...

package Testes;

import java.math.BigDecimal;
import java.math.RoundingMode;

public class TestaDoubles {
    public static void main(String[] args) {
        double x1;
        x1 = 9/3.0001;
        System.out.println(x1);

        BigDecimal x2 = new BigDecimal(9);
        BigDecimal x3 = new BigDecimal(3.0001);

        System.out.println(x2.divide(x3,30,RoundingMode.HALF_DOWN));        

    }
}

2.999900003333222 2.999900003333222014908677995263

resolvido obrigado