Em Java, quero converter um duplo em um inteiro, sei se você fizer isso:
double x = 1.5;
int y = (int)x;
você obtém y = 1. Se você fizer isto:
int y = (int)Math.round(x);
Você provavelmente obterá 2. No entanto, estou me perguntando: já que as representações duplas de inteiros às vezes se parecem com 1.9999999998 ou algo assim, existe a possibilidade de que converter um duplo criado por meio de Math.round () ainda resulte em um número truncado para baixo, do que o número arredondado que procuramos (ou seja: 1 em vez de 2 no código conforme representado)?
(e sim, quero dizer isso da seguinte forma: existe algum valor para x, onde y mostrará um resultado truncado em vez de uma representação arredondada de x?)
Em caso afirmativo: Existe uma maneira melhor de transformar um duplo em um inteiro arredondado sem correr o risco de truncamento?
Imaginei algo: Math.round (x) retorna um longo, não um duplo. Portanto: é impossível para Math.round () retornar um número parecido com 3,9999999. Portanto, int (Math.round ()) nunca precisará truncar nada e sempre funcionará.
Respostas:
Não,
round()
sempre arredondará seu duplo para o valor correto e, em seguida, será convertido para umlong
que truncará quaisquer casas decimais. Mas após o arredondamento, não haverá nenhuma parte fracionária restante.Aqui estão os documentos de
Math.round(double)
:fonte
[max double: 1.7976931348623157E308]
para int, que é muito menor[max int: 2147483647]
. Apenas algo para ter em mente.Para o tipo
Double
de dadosint
, você pode usar o seguinte:fonte
Resolvido meu propósito.
fonte