1. Método de redondeo El redondeo es un método de cálculo aproximado muy utilizado, que incluye dos tipos: método de redondeo aritmético y método de redondeo bancario. El llamado método de redondeo aritmético es el método de redondeo en nuestro sentido habitual. La regla es: cuando el valor del bit abandonado es mayor o igual a 5, el bit se retira mientras se retira el bit; El llamado método de redondeo del banquero es esencialmente un método para redondear cuatro redondeando seis en cinco y mantener el doble (también conocido como redondeo de seis en cinco impar e par). Las reglas son: cuando el valor del bit abandonado es inferior a 5, el bit se abandona directamente; Cuando el valor del bit izquierdo se abandona cuando es igual a 5, si el valor del dígito anterior es impar, entonces se cae el bit mientras se cae el bit. directamente. En resumen, los resultados obtenidos por los dos métodos de redondeo no son consistentes, por lo que deben distinguirse de acuerdo con las necesidades reales al usarlas. De lo contrario, se producirán algunas desviaciones inexplicables. 2. La función de redondeo en Delphi es bien conocida. Sin embargo, implementa operaciones de reducción de acuerdo con las reglas del método de redondeo del banquero. El uso de la función de redondeo en Delphi siempre ha estado usando Round, pero a veces descubrí que las respuestas obtenidas al usarla serán diferentes de lo que esperábamos. Por ejemplo: I: = Round (11.5) Resultado: I = 12i: = Round (10.5) Resultado: i = 10 Sí, según nuestras expectativas, la segunda función debería devolver 11, pero ¿por qué está sucediendo esto? Para xxx.5, la parte entera es un número impar, luego el redondeo será redondeado. ¿Es un error de Delphi? Este procesador utiliza el llamado método de redondeo del banquero, es decir, al implementar la función redonda en el valor intermedio (como 5.5, 6.5), el procesador determina si el redondeo se basa en la naturaleza impar e incluso del número antes del número. El punto decimal, como 5.5 alrededor del resultado, es 6, y el resultado de la ronda 6.5 también es 6, porque 6 es un número uniforme. La función redonda en realidad utiliza el algoritmo banquero para las operaciones, y generalmente se usa estadísticamente para usar este algoritmo, que es más científico que nuestro método de redondeo tradicional. Alguien resolvió de esta manera, agregando un valor muy pequeño a 10.5, y luego llamando a la función redonda. la causa raíz. Se encontró otra función en Internet: Funcion Doround (Valor: Extended): int64; = Default8087cw; Es el valor de la palabra de control del controlador de la unidad flotante (FPU) en la CPU. La idea del programa anterior es muy simple, que es guardar 8087CW primero, luego configurarla para redondear, de modo que cuando los números no se reduzcan hacia abajo, y finalmente restaurar 8087CW. De hecho, la función anterior se puede simplificar. Oldcw: = default8087cw; una solución. De hecho, Borland había pensado durante mucho tiempo que encontraríamos tal problema, y pensamos que necesitábamos personalizar el modo de redondeo de la FPU, por lo que proporcionó funciones preparadas para que podamos usar. En la unidad de matemáticas, hay una función setRoundMode. A continuación se muestra una función de redacción: la función RoundEx (Valor: Extended; RoundMode: TFPurundingMode = RMUP): int64; var rm: tfpuroundingmode begin rm: = getRoundMode SetRoundMode (rm); ¿paño? Por ejemplo: I: = RoundEx (11.5, RMTruncate) Resultado: I = 11i: = RoundEx (10.5, RMTruncate) Resultado: I = 10RoundEx La función se ha transformado en una función Trunc maravillosamente