Olá gente, tenho uma duvida simples, mas é complicado rsrsr.
Tenho que multiplicar 02 números ex: 1.032 x 1.010. Quando o usuário digitar preciso arredondar este valor sempre para mais, de 5 em 5, vai ficar ex: 1.05 x 1.05
ceil(): arredonda para cima
floor(): arredonda para baixo
use printf do C pra colocar 2 casas decimais.
nel
Terás de usar a classe BigDecimal.
Tem o método setScale em que você deve passar valores que se encontram como estáticos na própria classe BigDecimal, como por exemplo, ROUND_UP.
Abraços.
heatcold
tenho certeza que esse não é o jeito mais elegante de fazer isso, mas:
public static double roundUp(double d) {
long l = (long) d;
double decimal = d - l;
if (decimal == 0) {
return l;
}
decimal = (long) (decimal * 100);
if (decimal <= 5) {
return l + 0.05;
} else if (decimal <= 10) {
return l + 0.1;
} else if (decimal <= 50) {
return l + 0.5;
} else {
return l + 1;
}
}
heatcold
Outro jeito de fazer:
public static double roundUp(double d) {
long l = Math.round(d * 100);
long m = (l % 5);
l = l + ((m > 0) ? 5 - m : 0);
return ((double) l) / 100;
}
diego.sas
yhhik:
ceil(): arredonda para cima
floor(): arredonda para baixo
use printf do C pra colocar 2 casas decimais.
Mas para a situação que colocou a classe Math.ceil(double) ou Math.floor(double), cortas os 0.
Ex:
Math.ceil 2.017 = 3.0
Math.floor 2.017 = 2.0…
Não seria isso…
heatcold
doubled=Math.ceil(n1/0.05)*0.05;
yhhik
heatcold respondeu.
agora é so usar o printf para deixar 2 casas decimais depois do ponto.