![]() |
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! |
Re: Nachkommastellen vom Typ Real extrahieren und dann runde
So müsste es gehen:
Delphi-Quellcode:
neuezahl := Trunc((Zahl - Trunc( Zahl)) * 100 +5)/100;
|
Re: Nachkommastellen vom Typ Real extrahieren und dann runde
mit
Delphi-Quellcode:
sollte es auch gehen.
function Frac(X: Extended): Extended;
Anschliessend noch runden mit.
Delphi-Quellcode:
Grüße
function RoundTo(const AValue: Double; const ADigit: TRoundToRange): Double;
Klaus |
Re: Nachkommastellen vom Typ Real extrahieren und dann runde
Hallo mkinzler,
irgendwie funktioniert das leider nicht.
Delphi-Quellcode:
Wenn z.B. a := 2,10 und b := 8 dann bekomme ich bei einer Subtraktion als Ergebnis c = -0,85
a := strtofloat(InputA.text);
b := strtofloat(InputB.text); c := a - b; d := Trunc((c - Trunc(c)) * 100 +5)/100; OutputC.text :=FloatToStr(p); 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! |
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); |
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?
|
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 |
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. |
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 |
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 20:01 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