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.
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.
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
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!