AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein SimpleRoundTo: Unterschied D2006 und D2010??
Thema durchsuchen
Ansicht
Themen-Optionen

SimpleRoundTo: Unterschied D2006 und D2010??

Ein Thema von Ralf Kaiser · begonnen am 22. Apr 2010 · letzter Beitrag vom 22. Apr 2010
Antwort Antwort
Benutzerbild von Ralf Kaiser
Ralf Kaiser

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

SimpleRoundTo: Unterschied D2006 und D2010??

  Alt 22. Apr 2010, 07:13
Halli Hallo,

bei einer Berechnung ist mir folgendes aufgefallen:

Ich will einen Wert auf 2 Stellen runden und dabei nicht kaufmännisch nach "Bankers Rounding"-Regeln runden, sondern "ganz normal".

In Delphi 2010 funktioniert "SimpleRoundTo" genau so wie ich es mir vorstelle. Beispiele bei denen auf 2 Stellen gerundet wird:

88.115 => 88.12
88.665 => 88.67

Lasse ich die selben Rundungen nun mit Delphi 2006 durchführen dann erhalte ich diese Ergebnisse:

88.115 => 88.11
88.665 => 88.67

Ist das jetzt ein (eventuell bekannter) Bug in D2006? (Das wäre nicht so gut, da wir hier noch nicht alles auf D2010 umgestellt haben)

EDIT: der Rundungsmodus ist in beiden Delphi-Versionen per Voreinstellung "rmNearest"


Danke schon mal,
Ralf
Ralf Kaiser
  Mit Zitat antworten Zitat
Peter1999

Registriert seit: 13. Dez 2007
Ort: Dresden
88 Beiträge
 
Delphi XE2 Professional
 
#2

Re: SimpleRoundTo: Unterschied D2006 und D2010??

  Alt 22. Apr 2010, 08:52
Das ist wohl so.

Deshalb wurde wohl auch von Double (<= D2007) auf Extended (ab D2009) umgestellt.

Viele Grüße,
Peter
  Mit Zitat antworten Zitat
Benutzerbild von Billa
Billa

Registriert seit: 11. Aug 2003
237 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: SimpleRoundTo: Unterschied D2006 und D2010??

  Alt 22. Apr 2010, 08:52
Ob es zwischen den Verdsionen tatsächlich einen Unterschied gibt, weiß ich nicht.
Aber man kann ja mit einer eigenen Funktion das gewünschte Verhalten erzwingen.
Beispiel auf 2 Nachkommastellen

- Multipliziere mit 100
- Addiere 0.5
- Teile den ganzzahligen Anteil durch 100

Analog wird bei drei Nachkommastellen mit 1000 multipliziert bzw. dividiert ...
hth


Habe vor Urzeiten mal bei Delphi 5 was in der Richtung gelesen und verwende seitdem
die eigene Funktion, es sei denn es geht um kaufmännische Sachen ....
Gruß Billa

Nur weil ich paranoid bin, heißt das nicht, daß die da draussen nicht hinter mir her sind....
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: SimpleRoundTo: Unterschied D2006 und D2010??

  Alt 22. Apr 2010, 08:54
Zitat von Billa:
es sei denn es geht um kaufmännische Sachen ....
Da verwendet man eh vorwiegend den Typ Currency, welcher Aufgrund seiner Intergereigenschaften für sowas besser geeignet ist.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Peter1999

Registriert seit: 13. Dez 2007
Ort: Dresden
88 Beiträge
 
Delphi XE2 Professional
 
#5

Re: SimpleRoundTo: Unterschied D2006 und D2010??

  Alt 22. Apr 2010, 08:57
@Billa

Sieh dir mal die Quelltexte von SimpleRoundTo an.
Die machen genau das, was du da beschreibst.

Das Problem ist aber eher, was Himi sagt. Die Genauigkeit des Double ist einfach nicht ausreichend. Daher: Extended
  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
 
#6

Re: SimpleRoundTo: Unterschied D2006 und D2010??

  Alt 22. Apr 2010, 09:10
Zitat von Peter1999:
@Billa

Sieh dir mal die Quelltexte von SimpleRoundTo an.
Die machen genau das, was du da beschreibst.

Das Problem ist aber eher, was Himi sagt. Die Genauigkeit des Double ist einfach nicht ausreichend. Daher: Extended
Hab ich mittlerweile gemacht. Ich verwende jetzt nicht mehr SimpleRoundTo sondern den "Inhalt" von SimpleRoundTo den ich in eine eigene Routine kopiert habe. So erhalte ich mit D2006 und D2010 die selben Ergebnisse (nur noch nötig, bis hier D2010 endlich "offiziell" wird...)

Ciao,
Ralf
Ralf Kaiser
  Mit Zitat antworten Zitat
Benutzerbild von Billa
Billa

Registriert seit: 11. Aug 2003
237 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: SimpleRoundTo: Unterschied D2006 und D2010??

  Alt 22. Apr 2010, 09:19
Ok, den Datentyp hatte ich nicht berücksichtigt. Vielleicht war es ja in Wirklichkeit 88.114999999.
Da kann eine Umwandlung in String helfen "nicht sichtbare" Nachkommaanteile verschwinden zu lassen.
Bestimmt nicht schnell oder elegant, aber recht zuverlässig.
Gruß Billa

Nur weil ich paranoid bin, heißt das nicht, daß die da draussen nicht hinter mir her sind....
  Mit Zitat antworten Zitat
Alt 26. Apr 2010, 04:20     Erstellt von lhx123456
Dieser Beitrag wurde von Sharky gelöscht. - Grund: Werbung
Antwort Antwort


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 20:30 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