Arredondamento de valores

Olá,
Estou desenvolvendo uma API Rest para gerenciar as hospedagens de um Hotel/Motel. Quando eu faço o checkout do hospede eu chamo um método que calcula se a estadia vai ser em diárias ou em horas. segue o método:

private BigDecimal calculaValorHospedagem() {
        var duracaoEstadia = Duration.between(this.dataEntrada, this.dataSaida).toHours();
        if( duracaoEstadia > 8){
            var dias = Duration.between(this.dataEntrada, this.dataSaida).toDays() + 1;
            var valor = this.quarto.getDiaria().multiply(BigDecimal.valueOf(dias));
            return valor;
        }else {
            var horas = Duration.between(this.dataEntrada, this.dataSaida).toMinutes() / 60;
            var valor = this.quarto.getHora().multiply(BigDecimal.valueOf(horas));
            return valor;
        }

    }

O meu problema é quando a condição cai na parte de horas, ou seja quando a permanência é inferior a 8h. Eu queria fazer um arredondamento de 30 em 30 mim. Tipo, se a permanência do cara foi 1h e 10min fosse feito um arredondamento para 1h e 30min, ou se o cara ficou 2h e 40min fosse feito o arredondamento para 3h. Não sei se eu consegui explicar direito :slight_smile:

Existe alguma biblioteca que faça isso, ou tenho que implementar isso na base da lógica mesmo?

Agradeço desde já.

Não sei se há bibliotecas para isso, mas a lógica para o que vc quer é simples.

Basta vc pegar os minutos, dividir por 30 e arredondar pra cima. O resultado vc multiplica por 30.

Exemplo 1: 1h10m é igual à 70 minutos.

70 / 30 = 2,33.

2,33 arredondado pra cima é 3.

3 x 30 é 90, ou seja, 1h30m.

Exemplo 2: 2h40m é igual à 160 minutos.

160 / 30 = 5,33

5,33 arredondado pra cima é 6.

6 x 30 é 180, ou seja, 3h.