1. Rundungsmethodenrundung ist eine sehr weit verbreitete ungefähre Berechnungsmethode, die zwei Arten enthält: Arithmetik -Rundungsmethode und Banker -Rundungsmethode. Die sogenannte arithmetische Rundungsmethode ist die Rundungsmethode in unserem üblichen Sinne. Die Regel lautet: Wenn der Wert des verlassenen Bits größer oder gleich 5 ist, wird das Bit zurückgezogen, während das Bit zurückgezogen wird. Die sogenannte Banker-Rundungsmethode ist im Wesentlichen eine Methode, um vier Rundung von sechs in fünf zu runden und doppelt zu halten (auch als Rundung von sechs in fünf ungerade und gleichmäßige). Die Regeln sind: Wenn der Wert des verlassenen Bits weniger als 5 beträgt, wird das Bit direkt aufgegeben; Wenn der Wert des linken Bits bei gleich 5 aufgegeben wird, wird das Bit fallen gelassen, wenn der Wert der vorherigen Ziffer ungeradet ist, während das Bit fallen gelassen wird. direkt. Zusammenfassend sind die Ergebnisse der beiden Rundungsmethoden nicht konsistent, daher müssen sie bei der Verwendung gemäß den tatsächlichen Bedürfnissen unterschieden werden. Andernfalls treten einige unerklärliche Abweichungen auf. 2. Die Rundungsfunktion in Delphi ist bekannt. Es implementiert jedoch Rundungsvorgänge gemäß den Regeln der Banker -Rundungsmethode. Die Verwendung von Rundungsfunktionen in Delphi hat schon immer Runde verwendet, aber manchmal fand ich, dass die Antworten, die sie verwenden, sich von dem unterscheiden, was wir erwartet haben. Zum Beispiel: I: = Runde (11.5) Ergebnis: i = 12i: = rund (10,5) Ergebnis: i = 10 Ja, nach unseren Erwartungen sollte die zweite Funktion zurückkehren, aber warum passiert das? Für xxx.5 ist der ganzzahlige Teil eine ungerade Zahl, und rund auf. Ist es ein Delphi -Fehler? Dieser Prozessor verwendet die sogenannte Banker-Rundungsmethode, dh bei der Implementierung der runden Funktion auf dem Zwischenwert (z. Dezimalpunkt, wie 5,5 rund Das Ergebnis beträgt 6, und das Ergebnis von 6,5 Runden beträgt auch 6, da 6 eine gleichmäßige Zahl ist. Die runde Funktion verwendet tatsächlich den Banker -Algorithmus für den Betrieb und wird im Allgemeinen statistisch verwendet, um diesen Algorithmus zu verwenden, der wissenschaftlicher ist als unsere traditionelle Rundungsmethode. Jemand hat auf diese Weise einen sehr geringen Wert auf 10,5 hinzugefügt und dann die runde Funktion aufgerufen. die Grundursache. Es gibt keine orthodoxe Lösung mehr? Eine andere Funktion wurde im Internet gefunden: Funktion Doround (Wert: intend): int64; = Default8087CW; Es ist der Wert des Steuerungsworts der Floating Point Unit (FPU) in der CPU. Die Idee des oben genannten Programms ist sehr einfach, nämlich zuerst 8087CW zu speichern und es dann auf die Aufhebung zu setzen, sodass bei gleichzeitigen Zahlen nicht abgerundet werden und schließlich 8087CW wiederhergestellt werden. Tatsächlich kann die obige Funktion vereinfacht werden OldCW: = default8087CW; eine Lösung. Tatsächlich hatte Borland lange gedacht, dass wir auf ein solches Problem stoßen würden, und dass wir den Rundungsmodus der FPU anpassen mussten, sodass wir für uns vorbereitete Funktionen zur Verfügung stellten. In der Mathematikeinheit gibt es eine SetRoundMode -Funktion. Nachfolgend ist eine Rundungsfunktion iCapselt: Function RoundEx: erweitert; SetRoundMode (RM); Tuch? Zum Beispiel: I: = RoundEx (11.5, Rmtruncate) Ergebnis: i = 11i: = RoundEx (10.5, rmtruncate) Ergebnis: I = 10Roundex -Funktion wurde herzlich in eine Kreiselfunktion umgewandelt, ist es nicht sehr interessant?