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
ex:
1.001 = 1.05
1.070 = 1.10
1.971 = 2.00
Agradeço antecipadamente;
yhhik
Novembro 22, 2011, 8:01am
#2
ceil(): arredonda para cima
floor(): arredonda para baixo
use printf do C pra colocar 2 casas decimais.
nel
Novembro 22, 2011, 8:04am
#3
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.
tenho certeza que esse não é o jeito mais elegante de fazer isso, mas:
[code]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;
}
}[/code]
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;
}
[quote=yhhik]ceil(): arredonda para cima
floor(): arredonda para baixo
use printf do C pra colocar 2 casas decimais.[/quote]
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…
double d = Math.ceil(n1 / 0.05) * 0.05;
yhhik
Novembro 22, 2011, 9:48am
#8
heatcold respondeu.
agora é so usar o printf para deixar 2 casas decimais depois do ponto.
[code]double n=6.31;
double num= Math.ceil(n / 0.05) * 0.05;
System.out.printf("%.2f",num);[/code]
nossa realmente funciona essa conta do mal. vcs são bons mesmo. valew
double n=6.31;
double num= Math.ceil(n / 0.05) * 0.05;
System.out.printf("%.2f",num);