Wie bekomme ich Delphi Currency Type zum Runden wie Excel die ganze Zeit?

8

Ich versuche Delphi zu runden wie Excel, aber ich kann nicht. Hier ist der Code:

%Vor%

Ich verwende eine Währungsvariable, die auf 54321.245 gesetzt ist, und wenn ich diese Variable formatiere, wird sie mit Bankers Rounding gerundet. Wenn ich jedoch den gleichen Wert wie ein Literal formatiere, rundet es den Excel-Runden-Modus ab.

Ich habe erwartet, dass dies auf $ 54,321.25 gerundet wird, ganz gleich, ob eine Währungsvariable oder ein Literalwert gebildet wird. Wie kann ich sicherstellen, dass Delphi jedes Mal die gleiche Weise wie Excel ausführt?

Bearbeiten

%Vor%

Ich benutze nur Literale, um die verschiedenen Arten darzustellen, die Delphi rundet. Ich erwarte, Variablen im eigentlichen Code zu verwenden.

Hinweis:
Wenn ich die Variable von currency zu extended ändere, wird sie korrekt gerundet

Bearbeiten Sie # 2

Einige haben vorgeschlagen, dass ich meine Anforderungen nicht klar verstehe, das ist absolut nicht wahr. Ich habe ein klares Verständnis für meine Anforderungen, und ich bin offensichtlich nicht sehr gut darin, sie zu erklären. Die gewünschte Rundungsmethode ist zwei Dezimalstellen. Wenn der Dezimal-Teil einen Tausendstel-Wert hat & gt; = 0,005 Ich möchte, dass er auf 0,01 gerundet wird, tut dies der von Delphi angebotene Währungstyp nicht. Ich habe dieses Beispiel auch mit Microsoft SQL mit einem Geld-Datentyp versucht (von dem ich annahm, dass es mit der Währung von Delphi identisch war) und SQL rundet seinen Geld-Typ so ab, wie ich es beschrieben habe.

  • SQL Money & gt; = 0.005 = 0.01
  • Delphi Währung & gt; = 0.005: = 0.00

Bearbeiten # 3
Guter Artikel: Ссылка Mögliche Lösung: Ссылка

Bearbeiten # 4
Hier ist eine der Lösungen aus der Embarcadero-Diskussion

%Vor%     
Michael Riley - AKA Gunny 10.06.2012, 01:21
quelle

3 Antworten

12

Wenn ich Sie richtig verstehe, suchen Sie folgendes:

%Vor%     
David Heffernan 10.06.2012, 16:24
quelle
6

Es ist nicht möglich, RTL so zu rotieren, wie Sie möchten. Um die Rundung in Delphi zu beeinflussen, verwenden Sie SetRoundMode , die setzt das FPU-Steuerwort zum Runden, aber soweit ich das beurteilen kann, gibt es keine FPU-Unterstützung für das Runden das genaue dazwischen zwischen oben und unten (was im Allgemeinen vermieden wird, da es eine Verzerrung für höhere Werte erzeugt).

Sie müssen Ihre eigene Rundungsfunktion implementieren. Es gibt eine ausführliche Diskussion im Delphi-Rundungs-Thread im Embarcadero-Forum, das verschiedene Lösungen enthält.

    
Sertac Akyuz 10.06.2012 14:07
quelle
0

Sie können die Anzahl der Delphi-Runden mit folgenden Parametern steuern:

%Vor%

Unglücklicherweise entscheidet Delphi mit rmNearest, dass die Nummer 54321.245 näher an 54321.24 liegt als 54321.25

    
Hendra 10.06.2012 04:17
quelle