Dúvida em Math.floor[Resolvido]

Boa noite gente. Estou com dúvida na seguinte instrução:


double y = Math.floor(number * 10 + 0.5) / 10;

vamos supor que eu inseri 5,3927 como valor de number. Pelos meus cálculos, Math.floor(5,3927 * 10 + 0.5) / 10 = 5,4427 sendo assim, como floor retorna o maior inteiro não maior que o valor obtido, eu jurava que seria retornado, como valor, 5. Porém, ao executar o programa, o método retornou-me 5,4! não entendi esse fato, já que o floor retorna um inteiro :shock: . Obrigado pelo esclarecimento. Abraços.

Math.floor lhe retornou 54, não 5. Então você dividiu o valor por 10, e o resultado é 5,4. OK?

ué, mas se eu separar essa expressão da seguinte forma:

double conta = (number * 10  + 0.5) / 10;

e fizer:

double n = Math.floor(conta); 

eu vou obter 5,4 da mesma forma. Ou seja, eu terei dividido a expressão por 10 antes do Math.floor avaliar a expressão (number * 10 + 0.5) não sei se expliquei bem…

Melhor dizendo: desta forma que escrevi acima, o valor daria 5,4427 e assim, Math.floor teria que arredondar esse valor para o inteiro 5 : \

eu já havia pensado no que você havia dito entanglement. Porém, ao fazer atribuindo o resultado à conta, não entendi mais como Math.floor pode avaliar primeiro a instrução entre parênteses para depois o valor obtido ser dividido por 10.

Que eu saiba, em Java as expressões respeitam os parênteses. É para isso que eles servem (controlar a ordem de avaliação das expressões).

ué, mas se eu separar essa expressão da seguinte forma:

double conta = (number * 10  + 0.5) / 10;

e fizer:

double n = Math.floor(conta); 

eu vou obter 5,4 da mesma forma. [/quote]

Como? Nesse caso, o resultado é 5, porque o retorno de Math.floor é sempre um número inteiro. Você andou se esquecendo de recompilar o programa antes de rodar :frowning:

Sim, com toda a razão. Descobri qual era o verdadeiro problema: eu não gerei um novo .class para conter os dados do bloco de código da variável conta. Agora está dando 5.0 ao fazer pelo outro modo. Obrigado pela ajuda! :slight_smile:

Nada que um bom “rebuild” não resolva :slight_smile: