Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Nachkommastellen vom Typ Real extrahieren und dann runden (https://www.delphipraxis.net/63418-nachkommastellen-vom-typ-real-extrahieren-und-dann-runden.html)

juergen 18. Feb 2006 15:01


Nachkommastellen vom Typ Real extrahieren und dann runden
 
Hallo zusammen,
habe jetzt schon einiges gesucht, wohl aber nicht die richtigen Suchbegriffe verwendet... :(
Ich möchte alle Nachkommstellen einer Realzahl "extrahieren".
Dieser "extrahierter" Wert soll dann auf 2 Stellen gerundet werden. (kaufmännisch, also von 0...4,999... abrunden und ab 5.0 dann aufrunden)

Kann mir hier jemand weiterhelfen?

Vielen Dank schon mal vorab!

mkinzler 18. Feb 2006 15:04

Re: Nachkommastellen vom Typ Real extrahieren und dann runde
 
So müsste es gehen:
Delphi-Quellcode:
neuezahl := Trunc((Zahl - Trunc( Zahl)) * 100 +5)/100;

Klaus01 18. Feb 2006 15:44

Re: Nachkommastellen vom Typ Real extrahieren und dann runde
 
mit

Delphi-Quellcode:
function Frac(X: Extended): Extended;
sollte es auch gehen.

Anschliessend noch runden mit.

Delphi-Quellcode:
function RoundTo(const AValue: Double; const ADigit: TRoundToRange): Double;
Grüße
Klaus

juergen 18. Feb 2006 15:56

Re: Nachkommastellen vom Typ Real extrahieren und dann runde
 
Hallo mkinzler,
irgendwie funktioniert das leider nicht.
Delphi-Quellcode:
a := strtofloat(InputA.text);
b := strtofloat(InputB.text);
c := a - b;
d := Trunc((c - Trunc(c)) * 100 +5)/100;
OutputC.text :=FloatToStr(p);
Wenn z.B. a := 2,10 und b := 8 dann bekomme ich bei einer Subtraktion als Ergebnis c = -0,85
Ich benötige aber als Ergebnis die 9. -> c = 5,9
Oder a:= 2,10 und b := 8,8888 -> c = -6,7888
Ich benötige maximal 2 Nachkommstellen, in diesem Beispiel also 79


....

@ Klaus!
Aaaahhhhhh, frac scheint genau das zu sein was ich suche.
Vielen Dank!

juergen 18. Feb 2006 16:12

Re: Nachkommastellen vom Typ Real extrahieren und dann runde
 
Leider zu früh gefreut. :cry:
Beim Beispiel 2,10 - 8 = -5,9 liefert mir frac -> -0,9. Ich brauch aber die 9
Ehrlich gesagt weiß ich hier gar nicht was mir frac liefert, so wie es in der OH beschrieben ist, müsste doch eigentlich dort auch die 9 als Ergebnis rauskommen :?:

ich verwenende das folgendermaßen:
Delphi-Quellcode:
a := strtofloat(InputA.text);
b := strtofloat(InputB.text);
c := a - b;
p:= frac (c) ;
OutputC.text :=FloatToStr(p);

Khabarakh 18. Feb 2006 16:14

Re: Nachkommastellen vom Typ Real extrahieren und dann runde
 
Wie soll der Computer denn die 9 berechnen? Nur zur Sicherheit: Bei 1,234 bräuchtest du 234 (als Integer) als Ergebnis?

juergen 18. Feb 2006 16:20

Re: Nachkommastellen vom Typ Real extrahieren und dann runde
 
Hallo Sebastian,
in deinem Beispiel bräuchte ich als Ergebnis --> 23.
Wie gesagt, ich benötige die Nachkommastellen auf 2 Stellen kaufm. gerundet.

Gruß
Jürgen

Khabarakh 18. Feb 2006 16:51

Re: Nachkommastellen vom Typ Real extrahieren und dann runde
 
Hmm, aber als Integer (bzw. Byte)?
1,23 -> 23 und 1,2 -> 20 wäre möglich, aber was du verlangst, kann aufgrund der Ungenauigkeit der Fließkommazahlen nicht funktionieren.

juergen 18. Feb 2006 17:32

Re: Nachkommastellen vom Typ Real extrahieren und dann runde
 
also als Byte-Wert würde mir ja reichen.
Ich denke das es doch möglich sein muss bis zu 3 Zahlen hinter dem Komma "heraus zu selektieren"...
Wenn es 3 Zahlen sind diese dann zu runden auf 2 Zahlen, wenn es nur 2 Zahlen sind braucht nicht gerundet werden, wenn es nur eine Zahl hinter dem Komma ist braucht damit auch nichts gemacht werden.
Vielleicht hatte ich mich auch nur umständlich ausgedrück?

Grüsse
Jürgen

Khabarakh 18. Feb 2006 17:41

Re: Nachkommastellen vom Typ Real extrahieren und dann runde
 
Was ich geschrieben habe, stimmt nicht so ganz. Durch die Ungenauigkeit ist es natürlich nicht möglich, eine Anzahl der Nachkommastellen zu ermitteln, aber wenn als letzte Stelle eine 0 entsteht, kann man sie ja einfach abschneiden.
Du benutzt also Frac und RoundTo, wandelst das Ergebnis per Format oder FloatToStrF in einen String mit 2 Nachkommastellen um, extrahierst die Stellen ab dem Komma und entfernst ggf. eine hintenstehende 0.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:57 Uhr.
Seite 1 von 2  1 2      

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