Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Single runden (https://www.delphipraxis.net/184334-single-runden.html)

BadenPower 18. Mär 2015 19:42

AW: Single runden
 
Zitat:

Zitat von Scurra (Beitrag 1293977)
Funktioniert das wirklich?

Ja:
getestet auf WinXP mit Delphi2007.

Nein:
getestet auf WinXP mit Lazarus.

Scurra 18. Mär 2015 20:06

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:
var
  x1: Single

if x1 is Single then ...
versucht, aber führt zu einem Fehler: Class or interface type expected, but got "Single".

Ansonsten könnte ich wohl auch 2 überladene Versionen der Funktion verwenden:

Delphi-Quellcode:
function(aValue: Single; aPrecision: Integer): Single; overload;
function(aValue: Double; aPrecision: Integer); Double; overload;
Noch eine Frage zum Rundungsmodus rmTruncate: In der Hilfe steht hierzu: Truncates the value, rounding positive numbers down and negative numbers up.

Warum wird dann 44.6 (positive Zahl) auf 45 aufgerundet?

Danke für deine/eure Hilfe!

BadenPower 18. Mär 2015 20:56

AW: Single runden
 
Zitat:

Zitat von Scurra (Beitrag 1293981)
Noch eine Frage zum Rundungsmodus rmTruncate: In der Hilfe steht hierzu: Truncates the value, rounding positive numbers down and negative numbers up.

Warum wird dann 44.6 (positive Zahl) auf 45 aufgerundet?

Die deutsche Hilfe sagt da aber etwas anderes:
Code:
Schneidet den Wert ab. Positive Werte werden auf-, negative Werte abgerundet.

Sir Rufo 18. Mär 2015 21:02

AW: Single runden
 
Ich hatte da auch noch was
http://docwiki.embarcadero.com/RADSt...ositive_Zahlen

Medium 18. Mär 2015 23:42

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. ;)

Dejan Vu 19. Mär 2015 03:27

AW: Single runden
 
Zitat:

Zitat von Medium (Beitrag 1293989)
Und es ist ja nicht so...

Langsam bin ich dafür, Floatingpoint zu verbieten. Extended, Double und Single sollte ab sofort BCD oder decimal mit der gleichen Genauigkeit, von mir aus 1024 byte groß. Speicher kostet ja nichts mehr. :stupid:

Obwohl. Dann fehlen 10% der Forumsbeiträge.

himitsu 19. Mär 2015 04:08

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, ...

Dejan Vu 19. Mär 2015 06:04

AW: Single runden
 
BCD und decimal sind jetzt aber nicht unbedingt Floating Point Zahlen. Das ist ja gerade der Witz.

Scurra 21. Mär 2015 11:52

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!

Dejan Vu 21. Mär 2015 12:47

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.
Seite 2 von 3     12 3      

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