Pergunta

De acordo com a Wikipedia quando arredondamento um número negativo, você arredondar o número absoluto. Então, por que o raciocínio, -3.5 seria arredondado para -4. Mas quando eu uso java.lang.Math.round (-3,5) retorna -3. Alguém pode explicar isso?

Foi útil?

Solução

De acordo com a javadoc

Retorna o mais próximo longa ao argumento. O resultado é arredondado para uma número inteiro pela adição de 1/2, tendo a andar do resultado, e lançando o resultar digitar longa. Em outras palavras, o resultado é igual ao valor de a expressão:

(long)Math.floor(a + 0.5d)

Conceitualmente, você rodada se . Em outras palavras, para o número inteiro seguinte maior do que o valor e -3 é maior do que -3,5, enquanto que é menos -4.

Outras dicas

Há uma variedade de métodos de arredondamento; o que você está olhando é chamado Symmetrical arredondamento aritmético (como ele afirma). A seção que você está se referindo a estados: "Este método ocorre comumente usado em aplicações matemáticas, por exemplo em contabilidade É a única geralmente ensinado nas aulas de matemática elementar.". Este parece reconhecer que não é uma regra que é acordado globalmente em cima, apenas o que é mais comum.

Pessoalmente, eu não me lembro de nunca ter sido ensinado essa regra na escola. O meu entendimento de arredondamento tem sido sempre que 0,5 é arredondado para cima, independentemente do sinal do número. Aparentemente, os autores de Java têm o mesmo entendimento. Esta é assimétrica arredondamento aritmético.

Diferentes ferramentas e linguagens potencialmente utilizar diferentes esquemas de arredondamento. Excel, aparentemente, usa o método simétrico.

(No geral, eu recomendaria que se você encontrar um conflito entre Wikipedia e experiência, você procura por informações em outros lugares. Wikipedia não é perfeito.)

Por que vale a pena, java.math.BigDecimal tem modos de arredondamento selecionáveis ??se precisar de mais controle sobre esse tipo de coisa.

O artigo da Wikipedia você cita não diz que é a única forma de rodada, apenas o caminho comum a rodada. Também mencionado nesse artigo várias alternativas (infelizmente, nenhum dos quais descrevem método de arredondamento de Java - mesmo que chamá-lo para fora como "Asymmetric arredondamento aritmético" ao indicar o JavaScript faz)

.

Você precisa decidir como você deseja seus números arredondados, em seguida, usar esse método. Se a implementação do Java corresponde, então ótimo. caso contrário, você vai precisar para implementá-lo em seu próprio país.

De acordo com Javadocs:

Retorna o long mais próximo ao argumento. O resultado é arredondado para um número inteiro, adicionando 1/2, tendo o piso do resultado, e conversão do resultado de tipo long. Em outras palavras, o resultado é igual ao valor da expressão:

(long)Math.floor(a + 0.5d)

Acontece que a convenção é arredondar para cima. Eu acho que Wikipedia é falível. Acontece que a Microsoft enganou-se, porém, à medida que arredondar para -4 assim, que não é convenção (I verificado com alguém que tem um PhD em matemática).

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