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!

Foi ú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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top