Como arredondar um double em Java

Bom dia, estou tentando fazer um código e preciso arredondar um double para cima se for maior q n.5
tentei usar o comando match.ceil(); porem ele não arredonda. Alguém sabe alguma solução?

A forma que conheço de trabalhar com arredondamento de forma mais prática é usando BigDecimal e RoundingMode, mas não sei se atende 100% o que vc quer, veja:

public class Main {
	
	public static void main(String[] args) throws Exception {
		System.out.println(round(1.3)); // 1.0
		System.out.println(round(1.4)); // 1.0
		System.out.println(round(1.5)); // 1.0
		System.out.println(round(1.6)); // 2.0
	}
	
	private static double round(double num) {
		return new BigDecimal(num)
			.setScale(0, RoundingMode.HALF_DOWN)
			.doubleValue();
	}
}

Veja essa tabela na doc do RoundingMode:
https://docs.oracle.com/javase/7/docs/api/java/math/RoundingMode.html

Lembrando que o melhor seria trabalhar diretamente com BigDecimal diretamente em vez de double primitivo. E para criar BigDecimal, e evitar problemas com precisão, o melhor é usar o construtor que receba uma String.

2 curtidas

No meu caso eu precisaria q o 1.5 virasse 2. E sou iniciante não consegui compreender muito bem.

O Math.ceil arronda para cima. Isto imprime sempre 2:

System.out.print(Math.ceil(1.5));
System.out.print(Math.ceil(1.1));
System.out.print(Math.ceil(1.3));
System.out.print(Math.ceil(1.8));

O Math.round arrendonda como pretendes:

System.out.print(Math.round (1.5));  // 2
System.out.print(Math.round (1.1));  // 1
System.out.print(Math.round (1.3));  // 1
System.out.print(Math.round (1.8)); // 2
1 curtida