Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Gleitkommazahlen runden? (https://www.delphipraxis.net/65050-gleitkommazahlen-runden.html)

HorstBS 11. Mär 2006 16:04


Gleitkommazahlen runden?
 
Hallo,

gibt es eine Möglichkeite Gleitkommatzahlen zu verkleinern, indem man sie z.b. bis auf die letzten 6 Stellen hinterm Komma verkürzt?

arbeite mit Zahlen wie 0,435345346456654 und bekomme immer die fehlermeldung das die Zahl zu groß sei wenn ich sie mathematisch verwenden will.

beim runden hab ich ja das Problem das evtl auf 1 oder 0 gerundet wird.

jemand ne idee?
danke
Horst BS

Flare 11. Mär 2006 16:07

Re: Gleitkommazahlen runden?
 
einfach mal 1000000 nehmen und dann runden und dann wieder durch 1000000 ^^

Khabarakh 11. Mär 2006 16:08

Re: Gleitkommazahlen runden?
 
Single/Double/Extended hat immer eine festgelegte Mantissenlänge, da kann nichts "zu lang werden". Wie heißt der Fehler genau/wie sieht die Codestelle aus?

Nikolas 11. Mär 2006 16:12

Re: Gleitkommazahlen runden?
 
Zitat:

arbeite mit Zahlen wie 0,435345346456654 und bekomme immer die fehlermeldung das die Zahl zu groß sei wenn ich sie mathematisch verwenden will.
Welche Fehlermeldung und was verstehst du unter 'mathematisch verwenden'?

Um an die ersten sechs Stellen zu kommen, kannst du das Komma per Mulitplikation mit 10^6 nach rechts schieben, dann runden und per Muliplikation mit 10^-6 wieder zurückschieben.
Also
Delphi-Quellcode:
 x:= round(x*1000000)/1000000;

ichbins 11. Mär 2006 16:16

Re: Gleitkommazahlen runden?
 
Ein Gleitkommawert wird (stark vereinfacht) so gespeichert:

Code:
Integerwert für Wert der Zahl | Integerwert der soviel heisst wie: mal zwei hoch mich
also das:

4 - 6

würde heissen: 4 * 2^6 also 256. Zu groß kann die Zahl nicht werden, da für die einzelnen Bereiche immer nur eine bestimmte Anzahl von Bytes definiert wird. Zu groß wird die Zahl erst, wenn der hintere Bereich zu groß wird, und das ist erst bei Zahlen WEIT jenseits von 10^10 (bei Extended bei ungefähr 10^5000).

Khabarakh 11. Mär 2006 16:28

Re: Gleitkommazahlen runden?
 
Zitat:

Zitat von ichbins
Code:
Integerwert für Wert der Zahl

Ein Integer ist es auf keinen Fall. Zuerst einmal ist es natürlich nur ein Bitstrom. Auf deiner Abstraktionsebene wäre es eine normalisierte Binärzahl. Da eine normalisierte Binärzahl immer mit 1,... beginnt, kann diese Stelle gleich weggelassen werden (-> "Hidden Bit").

xaromz 11. Mär 2006 17:07

Re: Gleitkommazahlen runden?
 
Hallo,

zum Runden auf eine bestimmte Anzahl von Nachkommastellen werfe ich mal Delphi-Referenz durchsuchenRoundTo aus der Unit Math in die Runde.

Gruß
xaromz


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:40 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