Utilizando a classe Math

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