Em Java, eu quero converter um duplo para um inteiro, eu sei que se você fizer isso:
double x = 1.5;
int y = (int)x;
você recebe y=1. Se você fizer isso:
int y = (int)Math.round(x);
Você'provavelmente terá 2. No entanto, eu estou me perguntando: já que as representações duplas de inteiros às vezes parecem 1.9999999998 ou algo assim, existe a possibilidade de que lançar um duplo criado via Math.round() ainda resulte em um número truncado para baixo, ao invés do número arredondado que estamos procurando (ou seja: 1 em vez de 2 no código como representado) ?
(e sim, falo a sério como tal: Existe algum valor para x, onde y irá mostrar um resultado que é um truncado em vez de uma representação arredondada de x?)
Em caso afirmativo: Existe uma melhor forma de fazer um duplo duplo num int arredondado sem correr o risco de truncagem?
Imaginou algo: Matemática.redonda(x) retorna um longo, não um duplo. Portanto: é impossível para Math.round() retornar um número parecido com 3.9999998. Portanto, a int(Math.round()) nunca precisará truncar nada e sempre funcionará.
existe a possibilidade de que o lançamento de um duplo criado via
Math.round()
ainda resulte em um número truncado para baixo
Não, round()
sempre arredondará seu dobro para o valor correto, e então, será lançado para um long
que truncará qualquer casa decimal. Mas após o arredondamento, não restará nenhuma parte fracionária.
Aqui estão os documentos de Math.round(double)
:
Retorna o tempo mais próximo da discussão. O resultado é arredondado para um inteiro adicionando 1/2, tomando o piso do resultado, e lançando o resultado para digitar longo. Em outras palavras, o resultado é igual ao valor da expressão:
(longo)Math.floor(a + 0.5d)
Double perValue = 96.57;
int roundVal= (int) Math.round(perValue);
Resolvi o meu propósito.