![]() |
SimpleRoundTo: Unterschied D2006 und D2010??
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 |
Re: SimpleRoundTo: Unterschied D2006 und D2010??
Das ist wohl so.
Deshalb wurde wohl auch von Double (<= D2007) auf Extended (ab D2009) umgestellt. Viele Grüße, Peter |
Re: SimpleRoundTo: Unterschied D2006 und D2010??
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 .... |
Re: SimpleRoundTo: Unterschied D2006 und D2010??
Zitat:
|
Re: SimpleRoundTo: Unterschied D2006 und D2010??
@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 |
Re: SimpleRoundTo: Unterschied D2006 und D2010??
Zitat:
Ciao, Ralf |
Re: SimpleRoundTo: Unterschied D2006 und D2010??
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz