Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi "Real" soll Nachkommastellen ausgeben! (https://www.delphipraxis.net/108437-real-soll-nachkommastellen-ausgeben.html)

Avicenna 13. Feb 2008 17:05


"Real" soll Nachkommastellen ausgeben!
 
Hallo,
ich habe eine Variable "real", deren Wert Nachkommastellen besitzt. Trotzdem werden keine angezeigt. Anstatt "3,16" wird "3" ausgegeben. Die betreffenden Stellen:

Delphi-Quellcode:
  schnitt: real;
Delphi-Quellcode:
  schnitt:=ergebnis div 2000;
  label1.caption:='Schnitt: '+floattostr(schnitt);
Wie kriege ich es hin, sodass auch Nachkommastellen angezeigt werden?

Viele Grüße,
Avicenna

DeddyH 13. Feb 2008 17:07

Re: "Real" soll Nachkommastellen ausgeben!
 
Wieso benutzt Du div bei einer real? Versuch es mal mit /

[edit] Außerdem könntest Du Format für die Ausgabe benutzen, da kannst Du die Anzahl der auszugebenden Nachkommastellen mit angeben. [/edit]

Qwert Zuiopü 13. Feb 2008 17:10

Re: "Real" soll Nachkommastellen ausgeben!
 
beim Befehl div wird generell nur der ganzahlige anteil ausgegeben. wenn du nachkommastellen haben möchtest, musst du einfach
Delphi-Quellcode:
schnitt:=ergebnis/2000;
verwenden

Qwert Zuiopü 13. Feb 2008 17:15

Re: "Real" soll Nachkommastellen ausgeben!
 
@deddyH:
sry, deinen eintrag nicht genau genug gelesen
:!:

Avicenna 13. Feb 2008 17:28

Re: "Real" soll Nachkommastellen ausgeben!
 
Danke für eure Antworten,
mit "/" klappt es.
(Ich hatte bisher nur mit integer gearbeitet und kannte daher nichts Anderes als div).

Wie viele Nachkommastellen werden denn standardmäßig bei real angezeigt?

Zitat:

Außerdem könntest Du Format für die Ausgabe benutzen, da kannst Du die Anzahl der auszugebenden Nachkommastellen mit angeben.
Wie genau funktioniert das?


Avicenna

Hansa 13. Feb 2008 17:31

Re: "Real" soll Nachkommastellen ausgeben!
 
Mit
Delphi-Quellcode:
FloatToStrF
Tja, nur ein F zum Schluss. :mrgreen:

DeddyH 13. Feb 2008 17:35

Re: "Real" soll Nachkommastellen ausgeben!
 
Zugegebenermaßen sind die Format-Strings am Anfang nicht leicht zu verstehen. Mal ein Beispiel:
Delphi-Quellcode:
Label1.Caption := Format('Schnitt: %.3f',[ergebnis / 2000]);
Gibt Dir den Schnitt auf 3 Nachkommastellen gerundet aus. Zu den ganzen Möglichkeiten kannst Du mal die Hilfe konsultieren, das ist zu umfangreich, um hier alles darzulegen :mrgreen:

Avicenna 13. Feb 2008 17:53

Re: "Real" soll Nachkommastellen ausgeben!
 
Alles klar, dann lebe ich lieber mit den Nachkommastellen :-D

Aber trotzdem vielen Dank für eure Antworten.



Avicenna

Hansa 13. Feb 2008 18:51

Re: "Real" soll Nachkommastellen ausgeben!
 
Zitat:

Zitat von Avicenna
.. dann lebe ich lieber mit den Nachkommastellen :-D

Du gibst also zu, nicht in der Lage zu sein, ein F in dem Bezeichner einzufügen und die dadurch verursachte Fehlermeldung in der Delphi-Hilfe nachzugucken ? Na dann : gute Nacht. :mrgreen:

raiguen 13. Feb 2008 20:19

Re: "Real" soll Nachkommastellen ausgeben!
 
Zitat:

Zitat von Avicenna
...
Wie kriege ich es hin, sodass auch Nachkommastellen angezeigt werden?...

vs
Zitat:

Zitat von Avicenna
...dann lebe ich lieber mit den Nachkommastellen :-D

und DIE willst du doch haben ODER :gruebel: :gruebel: Warum widersprichst du dir dann selber? Was DeddyH geschnippslet hat, ist ja doch genau das was du möchtest(willst)...insofern mal hansa in diesem Fall zustimm..

Hansa 13. Feb 2008 20:46

Re: "Real" soll Nachkommastellen ausgeben!
 
Deine Bedenken sind die meinen. :mrgreen:

Deddys "Format" ist allerdings überdimensioniert, weil das reicht :

Delphi-Quellcode:
FloatToStrF (RealZahl,ffFixed,8,2);
Aber ist wohl schon zu viel verlangt. :P Insofern....

Avicenna 14. Feb 2008 14:30

Re: "Real" soll Nachkommastellen ausgeben!
 
Was ich damit sagen wollte:

Ich bleibe dabei, dass mit die standardmäßige Anzahl von Nachkommastellen angezeigt wird.

DeddyHs Quellcode hat mich schlichtweg erschreckt.
Hansas Quellcode sieht da schon etwas benutzerfreundlicher aus. Aber was bedeutet hier die 8 und die 2? Muss ich bei RealZahl meine Variable schnitt angeben? Ist die Groß- und Kleinschreibung bei FloatToStrF belanglos?

HalloDu 14. Feb 2008 14:43

Re: "Real" soll Nachkommastellen ausgeben!
 
Entschuldige mal. Ist es zuviel verlangt in der Hilfe nachzuschauen, was die Parameter bedeuten? Du wirst nicht immer so weiter kommen und das ist dir hoffentlich klar.

DeddyH 14. Feb 2008 14:48

Re: "Real" soll Nachkommastellen ausgeben!
 
Also, "überdimensioniert" finde ich Format eigentlich nicht, vor allem, wenn man mehrere Variablen darstellen möchte. Und nach genauem Durchlesen der Hilfe und etwas Übung geht das auch recht flott von der Hand.
Zitat:

Zitat von Delphi 5-Hilfe
Mit Format-Strings wird das Format für Formatierungsroutinen angegeben.

Kategorie

String-Formatierung

Beschreibung

Format-Strings, die an die Formatierungsroutinen für Strings übergeben werden, können zwei Arten von Objekten enthalten: literale Zeichen und Formatbezeichner. Literale Zeichen werden wörtlich in den resultierenden String kopiert. Formatbezeichner rufen Argumente aus der Argumentliste ab und weisen ihnen ein Format zu.
Formatbezeichner werden in der folgenden Form angegeben:

"%" [index ":"] ["-"] [width] ["." prec] type

Jeder Formatbezeichner beginnt mit dem Zeichen %. Auf das Prozentzeichen folgt eine der nachstehenden Angaben (in der aufgeführten Reihenfolge):

Ein optionaler Argumentindex-Bezeichner: [index ":"]
Eine optionale Angabe für die linksbündige Ausrichtung: ["-"]
Eine optionale Breitenangabe: [width]
Eine optionale Genauigkeitsangabe: ["." prec]
Das Zeichen für den Konvertierungstyp: type

In der folgenden Tabelle sind die verschiedenen Werte aufgeführt:

d d Dezimal. Das Argument muß ein Integerwert sein. Der Wert wird in einen String umgewandelt, der aus Dezimalzahlen besteht. Wenn der Format-String einen Bezeichner für die Genauigkeit enthält, muß der resultierende String mindestens die angegebene Anzahl von Stellen aufweisen. Enthält er weniger Stellen, wird der String auf der linken Seite mit Nullen aufgefüllt.
u u Vorzeichenlose Dezimalzahl. Das Format "u" entspricht dem Format "d", allerdings enthält der resultierende String kein Vorzeichen.
e e Wissenschaftliche Notation. Das Argument muß ein Gleitkommawert sein. Der Wert wird in einen String mit der folgenden Form umgewandelt: "-d,ddd...E+ddd". Wenn es sich um eine negative Zahl handelt, beginnt der String mit einem Minuszeichen. Vor dem Dezimaltrennzeichen steht immer eine Ziffer.
Die Gesamtzahl der Stellen im Ergebnis-String (einschließlich der Ziffer vor dem Dezimalkomma) wird durch den Genauigkeitsbezeichner im Format-String festgelegt. Ist dieser nicht vorhanden, wird eine vorgegebene Genauigkeit von 15 Stellen angenommen. Auf den Exponenten "E" im String folgen immer ein Plus- oder Minuszeichen und mindestens drei Stellen.
f f Fest. Das Argument muß ein Gleitkommawert sein. Der Wert wird in einen String mit der folgenden Form umgewandelt: "-ddd,ddd...". Wenn es sich um eine negative Zahl handelt, beginnt der String mit einem Minuszeichen.
Die Anzahl der Stellen nach dem Dezimalkomma wird durch den Genauigkeitsbezeichner im Format-String festgelegt. Ist dieser nicht vorhanden, wird eine vorgegebene Genauigkeit von zwei Dezimalstellen verwendet.
g g Allgemein. Das Argument muß ein Gleitkommawert sein. Der Wert wird unter Verwendung des Formats Fest oder wissenschaftliche Notation in den kürzestmöglichen Dezimal-String umgewandelt. Die Anzahl der signifikanten Stellen im resultierenden String wird durch den Genauigkeitsbezeichner im Format-String festgelegt. Ist dieser nicht vorhanden, wird eine vorgegebene Genauigkeit von 15 Stellen angenommen.
Nachfolgende Nullen werden aus dem resultierenden String entfernt. Ein Dezimaltrennzeichen wird nur bei Bedarf angezeigt. Für den resultierenden String wird das Festkommaformat verwendet, wenn die Anzahl der Stellen vor dem Dezimaltrennzeichen kleiner oder gleich der festgelegten Genauigkeit und der Wert größer oder gleich 0,00001 ist. In allen anderen Fällen wird die wissenschaftliche Notation benutzt.
n n Zahl. Das Argument muß ein Gleitkommawert sein. Der Wert wird in einen String mit der folgenden Form umgewandelt: "-d.ddd.ddd,ddd...". Das Format "n" entspricht dem Format "f", allerdings enthält der resultierende String Tausendertrennzeichen.
m m Währung. Das Argument muß ein Gleitkommawert sein. Der Wert wird in einen String umgewandelt, der einen Währungsbetrag darstellt. Die Steuerung der Konvertierung erfolgt mit Hilfe der globalen Variablen CurrencyString, CurrencyFormat, NegCurrFormat, ThousandSeparator, DecimalSeparator und CurrencyDecimals. Diese Variablen werden mit den Einstellungen initialisiert, die in der Windows-Systemsteuerung in der Registerkarte Währung der Ländereinstellungen enthalten sind. Enthält der Format-String einen Genauigkeitsbezeichner, setzt dieser den Wert in der globalen Variablen CurrencyDecimals außer Kraft.
p p Zeiger: Das Argument muß ein Zeigerwert sein. Der Wert wird in einen String mit acht Zeichen, der den hexadezimalen Wert des Zeigers darstellt, konvertiert.
s s String. Das Argument muß ein Zeichen, ein String oder ein PChar-Wert sein. Der String bzw. das Zeichen wird anstelle des Formatbezeichners eingefügt. Wenn im Format-String ein Genauigkeitsbezeichner angegeben ist, bestimmt er die maximale Länge des resultierenden Strings. Ist das Argument ein String, der diese Maximallänge überschreitet, wird der String abgeschnitten.
x x Hexadezimal. Das Argument muß ein Integerwert sein. Der Wert wird in einen String umgewandelt, der aus hexadezimalen Stellen besteht. Wenn der Format-String einen Bezeichner für die Genauigkeit enthält, muß der resultierende String mindestens die angegebene Anzahl von Stellen aufweisen. Enthält er weniger Stellen, wird der String auf der linken Seite mit Nullen aufgefüllt.
Konvertierungszeichen können beliebig in Klein- oder Großschreibung angegeben werden.
Bei allen Gleitkommaformaten wird das Zeichen für das Dezimal- bzw. das Tausendertrennzeichen aus den globalen Variablen DecimalSeparator und ThousandSeparator ausgelesen.
Die Bezeichner für Index, Breite und Genauigkeit können direkt durch Angabe eines Strings mit dezimalen Ziffern (z.B. "%10d") oder indirekt mit Hilfe von Sternchen (z.B. "%*.*f") angegeben werden. Im letzteren Fall wird das Argument, das in der Argumentliste auf das Sternchen folgt (es muß sich dabei um einen Integerwert handeln), als tatsächlicher Wert verwendet. Ein Beispiel:

Format('%*.*f', [8, 2, 123.456])

ist identisch mit

Format('%8.2f', [123.456]).

Der Breitenbezeichner legt die minimale Länge des Feldes für die Konvertierung fest. Ist der resultierende String kürzer als die minimale Feldlänge, wird er mit Leerzeichen aufgefüllt. Per Vorgabe werden die Leerzeichen vor dem Wert eingefügt, um eine rechtsbündige Ausrichtung zu erreichen. Enthält der Formatbezeichner jedoch einen Indikator für linksbündige Ausrichtung (vor dem Breitenbezeichner steht in diesem Fall ein Minuszeichen), werden die Leerzeichen nach dem Wert eingefügt und dieser linksbündig ausgerichtet.

Ein Indexbezeichner setzt den aktuellen Index der Argumentliste auf den angegebenen Wert. Der Index des ersten Arguments in der Liste hat den Wert 0. Durch die Verwendung von Indexbezeichnern kann dasselbe Argument mehrfach formatiert werden. Beispielsweise erzeugt "Format('%d %d %0:d %d', [10, 20])" den String '10 20 10 20'.

Die Format-Strings werden von den folgenden Routinen verwendet:

Format (Funktion)
FormatBuf (Funktion)
FmtStr (Prozedur)
StrFmt (Funktion)
StrLFmt (Funktion)


Avicenna 14. Feb 2008 14:50

Re: "Real" soll Nachkommastellen ausgeben!
 
Zitat:

Zitat von HalloDu
Ist es zuviel verlangt in der Hilfe nachzuschauen, was die Parameter bedeuten?

Selbstverständlich. Dank deinem Rat habe ich mich bemüht, die Hilfe zu benutzen und weiß nun, dass die 8 für die Nachkommastellen steht.

DeddyH 14. Feb 2008 14:52

Re: "Real" soll Nachkommastellen ausgeben!
 
Die 2 steht für die Nachkommastellen ;)

Hansa 14. Feb 2008 18:22

Re: "Real" soll Nachkommastellen ausgeben!
 
Zitat:

Zitat von Avicenna
..die Hilfe zu benutzen und weiß nun, dass die 8 für die Nachkommastellen steht.

:wall: ohne Worte. Wie wärs mit Friseuse/Frisör ? :mrgreen:

taaktaak 14. Feb 2008 18:32

Re: "Real" soll Nachkommastellen ausgeben!
 
Hmmmm,
habe den Thread mit wachsender Belustigung durchgelesen, trotzdem: Das mit der Friseuse finde ich etwas übertrieben :angel2:

DeddyH 14. Feb 2008 18:33

Re: "Real" soll Nachkommastellen ausgeben!
 
[OT] Heißt das nicht auf Neudeutsch "Frisörin"? [/OT]

Hansa 14. Feb 2008 18:40

Re: "Real" soll Nachkommastellen ausgeben!
 
Man kann auch "Frisörin" schreiben, aber das Ergebnis bleibt gleich. :zwinker:

bluesbear 14. Feb 2008 18:40

Re: "Real" soll Nachkommastellen ausgeben!
 
Zitat:

Zitat von taaktaak
Hmmmm,
habe den Thread mit wachsender Belustigung durchgelesen, trotzdem: Das mit der Friseuse finde ich etwas übertrieben :angel2:

ja, wahrscheinlich ist beim drücken auf F1 mal ein fingernagel abgebrochen. traumatisch sein, das kann... SCNR

Avicenna 14. Feb 2008 19:10

Re: "Real" soll Nachkommastellen ausgeben!
 
Zitat:

Zitat von Hansa
ohne Worte. Wie wärs mit Friseuse/Frisör ?

Wie wäre es mit einem DUDEN?
  • Am Satzanfang schreibt man groß.
  • Sprachliche Kürzungen trennt man mit einem Apostroph ab. (wär's)
  • Außerdem ist es formal betrachtet inkorrekt, vor Satzzeichen ein Leerzeichen zu setzen.
  • Die offizielle Berufsbezeichnung lautet Friseurin; die Bezeichnung Friseuse wird nur noch in der Umgangssprache verwendet.

© Duden - Richtiges und gutes Deutsch, 6. Aufl. Mannheim 2007 [CD-ROM]

HalloDu 14. Feb 2008 19:13

Re: "Real" soll Nachkommastellen ausgeben!
 
Erst sich so anstellen und dann noch besserwisserisch werden. Ich danke dir für diesen Einblick in deinen Charakter.

DeddyH 14. Feb 2008 19:26

Re: "Real" soll Nachkommastellen ausgeben!
 
Sorry, aber wenn man es nicht schafft, die F1-Taste zu drücken und den daraufhin erscheinenden Hilfetext aufmerksam zu lesen, muss man mit einem gewissen Spott leben können, sonst darf man sich nicht an ein Forum wenden. Du musst nicht denken, dass wir hier Anfänger permanent durch den Kakao ziehen, aber ein gewisses Umsetzungsvermögen wird hier einfach vorausgesetzt, und das gilt für jeden, auch wenn dieser schon 20 Jahre programmiert. (Just my 2 Cents)

HalloDu 14. Feb 2008 19:29

Re: "Real" soll Nachkommastellen ausgeben!
 
@DeddyH: Das bezogs sich nicht auf euch sonder auf Avicennas(der, der F1 nicht findet) Dudenpost. Da ich auch finde, dass man auch alleine etwas Initiative zeigen sollte. Hab anfangs ganz ohne Hilfe gelehrnt zu programmieren, 56k Modem, und weiß deshalb alzugut, dass das einfach nur Faulheit ist, was Avicenna hier abzieht.

DeddyH 14. Feb 2008 19:34

Re: "Real" soll Nachkommastellen ausgeben!
 
@HalloDu: ich bezog mich auch auf Avicenna ;)

HalloDu 14. Feb 2008 19:37

Re: "Real" soll Nachkommastellen ausgeben!
 
OK, hab ich dann wohl falsch verstanden :oops: , naja, lasst uns das mal hier beenden.

EDIT: Sonst traut der sich niemals noch eine Frage zu stellen.

Avicenna 14. Feb 2008 19:49

Re: "Real" soll Nachkommastellen ausgeben!
 
Dann will ich - fauler Avicenna - mal zeigen, wie ich vorgegangen bin:

Delphi - F1 - Suchen - FloatToStrF

Zitat:

Zitat von Delphi-Hilfe
CurrToStrF konvertiert einen Währungswert in einen String mit einem bestimmten Format.

Unit

Sysutils

Kategorie

Zahlenformatierung

function CurrToStrF(Value: Currency; Format: TFloatFormat; Digits: Integer): string;

Beschreibung

CurrToStrF konvertiert den in Value übergebenen Währungsbetrag in seine String-Entsprechung. Dabei wird das angegebene Gleitkommaformat verwendet. Der Aufruf von CurrToStrF entspricht einem Aufruf von FloatToStrF mit einer Genauigkeit von 19 Stellen.

Mein besonderer Augenmerk lag bei
Delphi-Quellcode:
function CurrToStrF(Value: Currency; Format: TFloatFormat; Digits: Integer): string;
Hier gibt es dreiBereiche:
-value
-format
-digits

Zitat:

Zitat von Hansa

Delphi-Quellcode:
FloatToStrF (RealZahl,ffFixed,8,2);

Da denkt sich der faule Avicenna :
-RealZahl=value
-ffFixed=format
-8=digits

mkinzler 14. Feb 2008 20:17

Re: "Real" soll Nachkommastellen ausgeben!
 
CurrToStrF != FloatToStrF

http://www.delphibasics.co.uk/RTL.asp?Name=FloatToStrF

Avicenna 14. Feb 2008 20:36

Re: "Real" soll Nachkommastellen ausgeben!
 
Entschuldige, ich hatte mich vertan

Zitat:

FloatToStrF konvertiert eine Gleitkommazahl in einen String-Wert mit dem angegebenen Format, der Genauigkeit und den Stellen.

Unit

Sysutils

Kategorie

Gleitkomma-Konvertierung

function FloatToStrF(Value: Extended; Format: TFloatFormat; Precision, Digits: Integer): string;

Beschreibung

FloatToStrF konvertiert die mit Value angegebene Gleitkommazahl in die entsprechende String-Darstellung.

Value ist der zu konvertierende Wert.
Precision legt die Genauigkeit des angegebenen Wertes fest. Sie sollte bei Werten des Typs Single bis zu 7, bei Werten des Typs Double bis zu 15 und bei Werten des Typs Extended bis zu 18 Stellen betragen.
Die Parameter Digits und Format steuern zusammen, wie die Formatierung in einen String erfolgt. Genaue Informationen hierzu finden Sie bei der Beschreibung von TFloatFormat.

Bei allen Formaten werden die tatsächlich als Dezimal- und Tausendertrennzeichen verwendeten Zeichen aus den globalen Variablen DecimalSeparator und ThousandSeparator gelesen.

Wird ein NAN-Wert an FloatToStrF übergeben, enthält der zurückgegebene String den Wert 'NAN'. Bei einer positiven unendlichen Zahl wird der String 'INF' und bei einer negativen unendlichen Zahl der String '-INF' zurückgegeben.
Das war das passende.

Ist aber nun auch egal (bevor ich noch in mehr Fettnäppfchen trete).

Eine schönes Wochenende

Avicenna

Hansa 14. Feb 2008 20:49

Re: "Real" soll Nachkommastellen ausgeben!
 
Zitat:

Zitat von Avicenna
Delphi - F1 - Suchen - FloatToStrF

Zitat:

Zitat von Delphi-Hilfe
CurrToStrF konvertiert einen Währungswert in einen String mit einem bestimmten Format.


Du machst echt viel verkehrt. :mrgreen: Bei FloatToStr F1 kommt die Hilfe zu CurrToStrF ?? Melde das bitte als Bug an Borland, sofern er sich reproduzieren lässt.

Mein besonderer Augenmerk lag bei
Delphi-Quellcode:
function CurrToStrF(Value: Currency; Format: TFloatFormat; Digits: Integer): string;
Von mir aus war lediglich die Rede von FloatToStrF. Du kannst auch vergeblich nach einer passenden Antwort suchen unter : showmessage F1. :zwinker:

Zitat:

Zitat von Avicenna
Da denkt sich der faule Avicenna :
-RealZahl=value
-ffFixed=format
-8=digits

Da gibts nichts zu denken, sondern nur nachzulesen. Bei Faulheit geht sowieso kaum was. Keiner hier weiß auswendig, welcher Parameter wo genau hingehört, wieviele es von welchem Typ sind usw.

P.S.: bei solchen Fragen hilft auch kein Duden.


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