1. public class Example {
2. public static void main(String [] args) {
3. double values[] = {-2.3, -1.0, 0.25, 4};
4. int cnt = 0;
5. for (int x=0; x < values.length; x++) {
6. if (Math.round(values[x] + .5) == Math.ceil(values[x])) {
7. ++cnt;
8. }
9. }
10. System.out.println("same results " + cnt + " time(s)");
11. }
12.}
what is the result, and Why?
A. same results 0 time(s)
B. same results 2 time(s)
C. same results 4 time(s)
D. Compilation fails.
E. An exception is thrown at runtime.
ps: Respostas com explicação!
Abraços!
2 Vezes
Caso a caso
-2,3
-2,3 + 0,5 = -1,8 ao arredondar = -2
ceil de -2,3 arredonda para cima então = -2 — Primeira equivalência
-1
-1 + 0,5 = -0,5 ao arredondar = 0 – sempre que termina em 5 arredonda para o maior
ceil de -1 é -1 mesmo
0,25
0,25 + 0,5 = 0,75 ao arredondar = 1
ceil de 0,25 é 1 — Segunda equivalência
4
4 + 0,5 = 4,5 ao arredondar = 5
ceil de 4 é 4 mesmo
Atenciosamente,
Bento Monteiro
SCJP
velho…entendi sua explicação …mais apenas para melhor didatica ( ou para lerdos como EU ahuhauahuahu) voce pode descrever a funçao exata do ceil e do round???
O Ceil sempre arredonda o número para o inteiro (embora o tipo de retorno seja double) de maior valor.
Por exemplo :
Math.ceil(1.1) = 2
Math.ceil(-1.1) = -1 //Deve-se lembrar que -1 > -2
O round arredonda para o inteiro mais próximo, exceto a parte decimal é .5, nesse caso a Sun optou por arredondar para cima. O que o método faz na verdade é somar 0.5 e realizar um floor.
Por exemplo :
Math.round(1.1) = 1 // 1.1 + 0.5 = 1.6, resulta em 1
Math.round(1.6) = 2 // 1.6 + 0.5 = 2.1, resulta em 2
Math.round(1.5) = 2 // 1.5 + 0.5 = 2.0, resulta em 2
Math.round(-1.1) = -1 // -1.1 + 0.5 = -0.6, resulta em -1
Math.round(-1.6) = -2 // -1.6 + 0.5 = -1.1, resulta em -2
Math.round(-1.5) = -2 // -1.5 + 0.5 = -1.0, resulta em -1
Atenciosamente,
Bento Monteiro
SCJP