Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Format-Befehl rundet falsch (https://www.delphipraxis.net/168466-format-befehl-rundet-falsch.html)

norwegen60 22. Mai 2012 22:30

Format-Befehl rundet falsch
 
Hallo zusammen,

kann es sein,dass der Format-Befehl falsch rundet? Wenn ich
Code:
var rValue : Real;
begin
      rValue := 9.995;
      Memo1.Lines.Add(format('%7.2f', [rValue]));
end
wird im Memo 9.99 angezeigt.

Ich verwende Delphi XE. Gibt es einen Abhilfe?

Grüße
Gerd

Lemmy 22. Mai 2012 22:45

AW: Format-Befehl rundet falsch
 
Hi,

welche Rundung hättens denn gern?

http://de.wikipedia.org/wiki/Rundung

Grüße

Amateurprofi 22. Mai 2012 23:02

AW: Format-Befehl rundet falsch
 
Mach mal folgendes:

Delphi-Quellcode:
var n:real; s:string;
begin
   n:=9.995;
   str(n:0:20,s);
   ShowMessage(s);
end;
Dann siehst du so etwas wie 9.99499999999999922000

Der Wert 9.995 kann nicht exakt abgebildet werden, in diesem Fall steht in n
ein Wert, der geringfügig kleiner ist, als 9.995 und der wird korrekt abgerundet.
WorkAround auf die Schnelle:

Delphi-Quellcode:
n:=9.995;
n:=Round(n*100+0.5)/100;

Popov 23. Mai 2012 01:37

AW: Format-Befehl rundet falsch
 
Zitat:

Zitat von norwegen60 (Beitrag 1167648)
Code:
var rValue : Real;
begin
      rValue := 9.995;
      Memo1.Lines.Add(format('%7.2f', [rValue]));
end
wird im Memo 9.99 angezeigt.

Die Frage am Anfang war schon richtig, was willst du erreichen und wie willst du es gerundet haben.

Wenn es eine Währung ist, dann ist Real sowieso falsch, versuch es mit Currency. Ergebnis wird 10.00 sein.

norwegen60 15. Jun 2012 16:35

AW: Format-Befehl rundet falsch
 
Hallo zusammen,

was ich wollte ist einen ganz normale mathematische Rundung. D.h. ab 5 wird aufgerundet, darunter ab. Und Delphi macht es ja auch so. Und es ist keine Währun.

Die Antwort von Amateurprofi hat mir aber weiter geholfen, denn jetzt weiß ich wenigstens warum es so ist. Nicht toll, aber so ist es halt. Ich hatte schon einen ähnlichen Ansatz gewählt wie von Amateurprofi empfohlen.

Danke deshalb
Gerd

himitsu 15. Jun 2012 17:50

AW: Format-Befehl rundet falsch
 
Zitat:

Zitat von Amateurprofi (Beitrag 1167651)
Delphi-Quellcode:
var n:real; s:string;
begin
   n:=9.995;
   str(n:0:20,s);
   ShowMessage(s);
end;

Hier besser Delphi-Referenz durchsuchenTrunc verwenden, denn sonst behebt man keinen Fehler, sondern verschieb ihn nur.


Delphi-Referenz durchsuchenSetRoundMode gibt es zwar auch noch, aber sowas global umzustellen ist nicht unbedingt optimal.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz