AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Format-Befehl rundet falsch

Ein Thema von norwegen60 · begonnen am 22. Mai 2012 · letzter Beitrag vom 15. Jun 2012
Antwort Antwort
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
504 Beiträge
 
Delphi 12 Athens
 
#1

Format-Befehl rundet falsch

  Alt 22. Mai 2012, 22:30
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
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.364 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Format-Befehl rundet falsch

  Alt 22. Mai 2012, 22:45
Hi,

welche Rundung hättens denn gern?

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

Grüße
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.039 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Format-Befehl rundet falsch

  Alt 22. Mai 2012, 23:02
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;
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#4

AW: Format-Befehl rundet falsch

  Alt 23. Mai 2012, 01:37
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.
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
504 Beiträge
 
Delphi 12 Athens
 
#5

AW: Format-Befehl rundet falsch

  Alt 15. Jun 2012, 16:35
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.016 Beiträge
 
Delphi 12 Athens
 
#6

AW: Format-Befehl rundet falsch

  Alt 15. Jun 2012, 17:50
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:56 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