AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Rundung bei Verwendung von DisplayFormat

Ein Thema von Ralf Kaiser · begonnen am 3. Aug 2015 · letzter Beitrag vom 3. Aug 2015
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#1

Rundung bei Verwendung von DisplayFormat

  Alt 3. Aug 2015, 15:15
Halli Hallo,

Wir lassen verschiedene Werte die aus einer Datenbank gelesen werden in einem Report anzeigen. Diese Werte sollen mit 2 Nachkommastellen angezeigt werden. Das ist über "DisplayFormat" festgelegt.

Wir habe nun das Problem, dass diese Anzeige scheinbar nicht korrekt arbeitet. Um das zu prüfen habe ich die Daten im Report durch eine einzelne Reportvariable ersetzt der ich einen festen Wert zugewiesen habe: z.B. 0.375000000000.

Dieser Testwert wird mit dem zweistelligen DisplayFormat als "0,37" angezeigt. Meiner Meinung nach müsste dies aber "0,38" sein, oder liege ich da falsch?

Was noch dazu kommt: Auf einem System das zum Test benutzt wird ist ein Windows 2003 Server installiert und dort wird "0,38" als Ergebnis erzeugt. Auf anderen Systemen (Win7, Win2008 Server) ist der angezeigte Wert immer "0,37"

Ich habe den gesamten Code kontrolliert ob da irgendwo an den FPU-Einstellungen etwas geändert wird (SetRoundMode oder Set8087CW usw.), was aber nicht der Fall ist.

Kann jemand erklären, warum die Anzeige mit "DisplayFormat" nicht korrekt ist und warum sie sich von System zu System unterscheiden kann?

Danke schon mal für Tipps oder Hinweise,
Ralf
Ralf Kaiser

Geändert von Ralf Kaiser ( 3. Aug 2015 um 17:17 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: Rundung bei Verwendung von DisplayFormat

  Alt 3. Aug 2015, 16:00
Verschiedene Werte... darf ich raten, ftFloat? Schreib am Besten eine eigene Rundung im GetText. Du wurdest ge-ieeet
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Rundung bei Verwendung von DisplayFormat

  Alt 3. Aug 2015, 16:22
Verschiedene Werte... darf ich raten, ftFloat? Schreib am Besten eine eigene Rundung im GetText. Du wurdest ge-ieeet
Ich hatte als Test den Wert 0.375000000000 benutzt. Durch die zusätzlichen Nullen die den Wert genauer definieren sollten eigentlich diese Effekte keine Rolle mehr spielen (wie ich schrieb kommt der Wert für den Test nicht mehr aus der Datenbank sondern wird als Konstante fest zugewiesen).

Was mich irritiert ist der Umstand, dass sich die slebe Software auf 2 verschiedenen Systemen unterschiedlich verhält. Kann denn eine andere (fremde) Software die gleichzeitig läuft da einen Einfluss ausüben?
Ralf Kaiser

Geändert von Ralf Kaiser ( 3. Aug 2015 um 16:27 Uhr)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#4

AW: Rundung bei Verwendung von DisplayFormat

  Alt 3. Aug 2015, 16:32
Das Problem ist, das 0.375 nicht exakt darstellbar ist. Mich wundert es zwar, das dies auf unterschiedlichen Systemen unterschiedlich gerundet (bzw. intern dargestellt) wird, aber ich habe Ähnliches vor Jahren erlebt.
(Ziemlich amateurhafte) Abhilfe:
Delphi-Quellcode:
Function RoundToDecimal (aValue, aGranularity : Double);
begin
  result := (0.500000000001 + Trunc(aValue/aGranularity))*aGranularity;
end;
Getippt und nicht getestet.

Bei mir ging es um Cent-Beträge und da hatte mir das gereicht. Aufruf für 2 Nachkommastellen übrigens mit 'RoundToDecimal(value,0.01)'.
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Rundung bei Verwendung von DisplayFormat

  Alt 3. Aug 2015, 16:41
Das Problem ist, das 0.375 nicht exakt darstellbar ist.
Das sollte aber doch bei dem angegebenen Literal "0.375000000000" nicht der Fall sein. Das ist auf 12 Stellen genau angegeben und zeigt trotzdem den Effekt (oder ignoriert Delphi die zusätzlichen Nullen und nimmt an ich hätte "0,375" angegeben (mit der daruas resultierenden Ungenauigkeit)?
Ralf Kaiser
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.006 Beiträge
 
Delphi 12 Athens
 
#6

AW: Rundung bei Verwendung von DisplayFormat

  Alt 3. Aug 2015, 16:57
einen festen Wert zugewiesen habe: z.B. 0.375000000000.

Dieser Testwert wird mit dem zweistelligen DisplayFormat als "0,73" angezeigt. Meiner Meinung nach müsste dies aber "0,74" sein, oder liege ich da falsch?
Ziemlich falsch! Da müsste eher sowas wie 0,37 oder 0,38 rauskommen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.006 Beiträge
 
Delphi 12 Athens
 
#7

AW: Rundung bei Verwendung von DisplayFormat

  Alt 3. Aug 2015, 17:08
Das Problem ist, das 0.375 nicht exakt darstellbar ist.
Doch, eigentlich schon:

Single (Hex): 3EC00000
Double (Hex): 3FD8000000000000

0.375 lässt sich auch als 1.5 / 4 schreiben, was zu einem Exponenten von -2 oder normiert 125 bzw. 1021 führt. Die 1 vor dem Komma wird implizit angenommen und die 0.5 lässt sich als Mantisse binär exakt mit einer 1 und vielen Nullen darstellen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Rundung bei Verwendung von DisplayFormat

  Alt 3. Aug 2015, 17:08
einen festen Wert zugewiesen habe: z.B. 0.375000000000.

Dieser Testwert wird mit dem zweistelligen DisplayFormat als "0,73" angezeigt. Meiner Meinung nach müsste dies aber "0,74" sein, oder liege ich da falsch?
Ziemlich falsch! Da müsste eher sowas wie 0,37 oder 0,38 rauskommen.
Ooops. Sorry. Das war ein Vertipper. Ich habe es im Originalpost korrigiert.
Ralf Kaiser
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.006 Beiträge
 
Delphi 12 Athens
 
#9

AW: Rundung bei Verwendung von DisplayFormat

  Alt 3. Aug 2015, 17:09
Ich habe es im Originalpost korrigiert.
Mach nochmal...
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: Rundung bei Verwendung von DisplayFormat

  Alt 3. Aug 2015, 17:18
Das muss die Hitze sein
Ralf Kaiser
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06:02 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