1. O arredondamento do método de arredondamento é um método de cálculo aproximado amplamente utilizado, que inclui dois tipos: método de arredondamento aritmético e método de arredondamento de banqueiro. O chamado método de arredondamento aritmético é o método de arredondamento em nosso sentido usual. A regra é: quando o valor do bit abandonado é maior ou igual a 5, o bit é retirado enquanto o bit é retirado; O chamado método de arredondamento de banqueiro é essencialmente um método de arredondar quatro arredondando seis em cinco e manter o dobro (também conhecido como arredondamento de seis em cinco ímpares e uniformes). As regras são: quando o valor do bit abandonado é menor que 5, o bit é abandonado diretamente; Quando o valor do bit esquerdo é abandonado quando igual a 5, se o valor do dígito anterior for ímpar, o bit é descartado enquanto o bit é descartado. diretamente. Em resumo, os resultados obtidos pelos dois métodos de arredondamento não são consistentes, portanto, eles devem ser distinguidos de acordo com as necessidades reais ao usá -las. Caso contrário, alguns desvios inexplicáveis ocorrerão. 2. A função de arredondamento em Delphi é bem conhecida. No entanto, ele implementa operações de arredondamento de acordo com as regras do método de arredondamento do banqueiro. O uso da função de arredondamento em Delphi sempre usou rodada, mas às vezes descobri que as respostas obtidas usando -a serão diferentes do que esperávamos. Por exemplo: i: = redondo (11.5) Resultado: i = 12i: = redonda (10.5) Resultado: i = 10 Sim, de acordo com nossas expectativas, a segunda função deve retornar 11, mas por que isso está acontecendo? Para xxx.5, a parte inteira é um número ímpar, depois o arredondamento será redondo. É um bug Delphi? Esse processador usa o chamado método de arredondamento de banqueiro, ou seja, ao implementar a função redonda no valor intermediário (como 5.5, 6.5), o processador determina se o arredondamento é baseado na natureza ímpar e uniforme do número antes do O ponto decimal, como 5,5, o resultado é 6 e o resultado de 6,5 rodada também é 6, porque 6 é um número par. A função redonda realmente usa o algoritmo de banqueiro para operações e geralmente é usado estatisticamente para usar esse algoritmo, que é mais científico do que o nosso método de arredondamento tradicional. Alguém resolveu dessa maneira, adicionando um valor muito pequeno a 10.5 e, em seguida, chamando a função redonda. A causa raiz. Outra função foi encontrada na Internet: função Doround (Valor: Extenção): INT64; = Default8087cw; É o valor da palavra de controle do controlador da unidade de ponto flutuante (FPU) na CPU. A idéia do programa acima é muito simples, que é economizar 8087CW primeiro e depois configurá -lo para arredondar, para que quando os números não sejam redondos e finalmente restaurem 8087CW. De fato, a função acima pode ser simplificada Antigo: = default8087cw; uma solução. De fato, Borland há muito pensava que encontraríamos esse problema e pensávamos que precisávamos personalizar o modo de arredondamento da FPU, para que ela fornecesse funções prontas para usarmos. Na unidade de matemática, há uma função SetRoundMode. Abaixo está uma função de arredondamento I encapsulada: Função RoundEx (Valor: estendido; RoundMode: TfpuroundingMode = RMUP): Int64; var rm: tfpuroundingMode; SetRoundMode (RM); pano? Por exemplo: I: = RoundEx (11,5, rmtruncato) Resultado: I = 11i: = RoundEx (10,5, RMtruncato) Resultado: I = 10RoundEx Função foi transformada em uma função trunc