AW: Single runden
Zitat:
getestet auf WinXP mit Delphi2007. Nein: getestet auf WinXP mit Lazarus. |
AW: Single runden
Ok, dann bin ich froh, dass es wahrscheinlich nur an Lazarus liegt, dass es bei mir nicht funktioniert. Ich habe mir jetzt einmal genau angeschaut, was SetPrecisionMode und SetRoundMode bedeutet. Für Single funktioniert das ganze vmtl., wenn ich SetPrecisionMode(pmSingle) verwende. Gibt es eine Möglichkeit, abzufragen, ob eine Zahl Single oder Double ist. Ich habe es mit
Delphi-Quellcode:
versucht, aber führt zu einem Fehler: Class or interface type expected, but got "Single".
var
x1: Single if x1 is Single then ... Ansonsten könnte ich wohl auch 2 überladene Versionen der Funktion verwenden:
Delphi-Quellcode:
Noch eine Frage zum Rundungsmodus rmTruncate: In der Hilfe steht hierzu: Truncates the value, rounding positive numbers down and negative numbers up.
function(aValue: Single; aPrecision: Integer): Single; overload;
function(aValue: Double; aPrecision: Integer); Double; overload; Warum wird dann 44.6 (positive Zahl) auf 45 aufgerundet? Danke für deine/eure Hilfe! |
AW: Single runden
Zitat:
Code:
Schneidet den Wert ab. Positive Werte werden auf-, negative Werte abgerundet.
|
AW: Single runden
Ich hatte da auch noch was
http://docwiki.embarcadero.com/RADSt...ositive_Zahlen |
AW: Single runden
Wenn einen Dinge wie 49,9999995743 statt 50 stören (also nicht nur in der Anzeige, da ist das ja lösbar, sondern in der Rechnung selbst), muss man i.A. auf Fließkommazahlen verzichten. Auch wenn die Operanden und Ergebnisse vielleicht genau darstellbar wären, heisst es noch lange nicht, dass der Rechenweg (in diesem Fall die Rundung) auch nur mit exakt darstellbaren Zwischenwerten passiert. Da gibt es auch keinen Weg, dies für den generellen Fall zu garantieren. Festpunkt Arithmetik, oder lebe damit.
Und es ist ja nicht so, als hätten wir das Thema "Ungenauigkeit von Floats" fast wöchentlich hier. Es ist eben eine gegebene Eigenschaft dieser Technik. Daher wundert mich, dass die anderen Antworten darauf bisher überhaupt nicht eingegangen sind. Du findest also mehr Material dazu hier als einem lieb wäre. ;) |
AW: Single runden
Zitat:
Obwohl. Dann fehlen 10% der Forumsbeiträge. |
AW: Single runden
Egal auf was man rundet, in Fließkommazahlen bleiben dennoch die bekannten Rundungsfehler enthalten, welche auf Grund des Speicherformates entstehen.
Will man unbedingt in der Anzeige ein bestimmtes Format, dann sollte man auch an dieser Stelle das Format entsprechend vorgeben. Format, FloatToStrF, Str, FloatToTextFmt, ... |
AW: Single runden
BCD und decimal sind jetzt aber nicht unbedingt Floating Point Zahlen. Das ist ja gerade der Witz.
|
AW: Single runden
Meine "Lösung" sieht jetzt so aus, dass ich ganz einfach die Rundungsfehler akzeptiere. Bei 4 Nachkommastellen, auf die ich meistens runde, macht es auch keinen so großen Unterschied. Gravierend würde es werden, wenn ich auf eine ganze Zahl runden möchte und es wird falsch gerundet.
Danke an alle, die geholfen haben! |
AW: Single runden
Und manchmal wirst Du einen Cent daneben liegen. Und Du wirst nichts dagegen unternehmen können.
Aber klar, wenn Du dein Privatportfolio von mehreren Hundert Mio Euro damit verwaltest, ist das eh wurscht. :lol: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:46 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