resposta diferente ao converter um duplo para um Int - Java vs Net
Pergunta
Em C # se eu quiser converter um duplo (1,71472) para um int depois eu recebo a resposta 2. Se eu fizer isso em Java usando o método intValue (), recebo 1 como a resposta.
O Java para baixo redonda sobre conversões?
Por que a documentação da API Java tem como poucas informações sobre suas aulas ou seja
Retorna o valor do especificado número como um int. Isto pode envolver arredondamento ou truncamento.
Um pouco mais informação sobre o arredondamento teria sido útil!
Solução
rodadas Java em direção a zero quando se estreitando a partir de um ponto flutuante para um inteiro do tipo e assim que faz C #, quando você usa a conversão de fundição. É de Convert.ToInt32
que rodadas:
double d = 1.71472;
int x = (int) d; // x = 1
int y = Convert.ToInt32(d); // y = 2
Detalhes podem ser encontrados no linguagem Java Specification . Note-se que, enquanto a documentação citada em folhas Number
opções abrir para subclasses, a documentação sobre os tipos de concreto de boxe, como Double
, é explícito sobre a implementação:
Retorna o valor deste duplo como um int (moldando o tipo int).
Ao usar BigDecimal
, você pode especificar uma das oito políticas de arredondamento diferentes.
Outras dicas
rodadas Java em direção a zero quando se estreitando a partir de um ponto flutuante para um tipo inteiro.
Há mais documentação sobre as regras gerais na linguagem Java especificação. Note-se que, enquanto a documentação em opções folhas Number
abrir para subclasses, a documentação sobre os tipos de boxe de concreto é mais explícito:
Retorna o valor deste duplo como um int (moldando o tipo int).
Ao usar BigDecimal , você pode especificar uma das oito políticas de arredondamento diferentes.
Jon Skeet é correto, mas outra coisa a observar é que os usos .NET arredondamento do banqueiro como seu algoritmo de arredondamento. Quando você está a meio caminho entre redonda para o número inteiro mesmo.