Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   FloatToStr problem wegen punkt als 1.000er markierung (https://www.delphipraxis.net/159648-floattostr-problem-wegen-punkt-als-1-000er-markierung.html)

Gilmohr 6. Apr 2011 19:22

Delphi-Version: 7

FloatToStr problem wegen punkt als 1.000er markierung
 
Hi, kann mir jemand sagen wie ich meine dezimalzahlen formatieren muss (zb. FloatToStrF ???)
damit sie nicht mit einem punkt in eine variable übernommen und ausgegeben werden? weil delphi bei der weiteren verwendung dieser variablen meckert dass es keine gültig gleitkommazahl sei.

Bsp: also nicht so: 1.523,7 sondern so: 1523,7 :shock:

Kann mir da jemand helfen?
schonmal vielen dank!

Bummi 6. Apr 2011 19:28

AW: FloatToStr problem wegen punkt als 1.000er markierung
 
Delphi-Quellcode:
StrToFloat(StringReplace('1.523,7 ' ,ThousandSeparator, '', [rfReplaceAll]))

Gilmohr 6. Apr 2011 19:57

AW: FloatToStr problem wegen punkt als 1.000er markierung
 
schonmal danke, bei der ausgabe der zahl funktioniert das schonmal.
nur wie bringe ich ihm bei dass er von anfang an keine punkte in die variable mit hineinspeichern soll?

Delphi-Quellcode:
p2[a] := FloatToStrF(StrToInt(p1[a]) * StrToFloat(v2[a])...usw ,ffNumber,8,2 );

Sir Rufo 6. Apr 2011 20:45

AW: FloatToStr problem wegen punkt als 1.000er markierung
 
Wofür soll denn diese Umwandlungsorgie gut sein?

Gilmohr 6. Apr 2011 21:12

AW: FloatToStr problem wegen punkt als 1.000er markierung
 
was denn für eine umwandlungsorgie :cyclops: ???

ich hab ne array-variable die über eine formel ihren wert bekommt der oftmals über 999 liegt.
diese soll einmal OHNE 1000er-Punkt ausgegeben und angezeigt werden. das funktioniert ja bereits.

die frage ist jetzt nurnoch ob und wenn ja, wie ich direkt vereinbaren kann das der wert von anfang an ohne punkt gespeichert wird, damit ich mit dieser variablen an anderer stelle weiterrechnen kann !


PS: die fragen nach dem warum spielt doch eigentlich garkeine Rolle

Sir Rufo 6. Apr 2011 21:27

AW: FloatToStr problem wegen punkt als 1.000er markierung
 
Einen Wert in einen String umzuwandeln und umgekehrt macht nur Sinn bei der Ein- oder Ausgabe.
Hier sieht es aber so aus, als ob diese Umwandlung auch für/im Berechnungsteil erfolgt.

Das wäre dann ein Designfehler.

Es ist aber nicht wirklich ersichtlich, somit ist die Frage nach dem Warum durchaus berechtigt.

Nicht umsonst gilt der goldene Grundsatz: "Trenne Anzeige und Code"

Gilmohr 6. Apr 2011 21:37

AW: FloatToStr problem wegen punkt als 1.000er markierung
 
mag sein, das löst aber mien problem bisher nicht!
wie speichere ich meine variable OHNE punkt?

Gilmohr 6. Apr 2011 21:49

AW: FloatToStr problem wegen punkt als 1.000er markierung
 
hab jetzt mal paar min über deine letzte aussage gegrübelt.

es sit tatsächlich so, dass ich des öfteren meine variablen in der berechnung umwandele.... und dann später das ergebnis weil ich es an anderer stelle wieder benötige zurückwandele...
mein code ist daher recht unübersichtlich...
nur für dieses wollknäul auseinander zu nehmen und sauber zu coden fehlt mir die zeit, wissen und lust.
bin froh das sonst soweit alles funktioniert.

kann mir daher jemand sagen wie ich die variable ohne punkt speichern kann?

Luckie 6. Apr 2011 21:59

AW: FloatToStr problem wegen punkt als 1.000er markierung
 
Zitat:

Zitat von Gilmohr (Beitrag 1093534)
nur für dieses wollknäul auseinander zu nehmen und sauber zu coden fehlt mir die zeit, wissen und lust.
bin froh das sonst soweit alles funktioniert.

Das solltest du aber ganz schnell mal tun. Die Zeit, die du da aufwendest sparst du dir nachher bei der Fehlersuche und bei Problemen wie diesen. Die werden nämlich nicht weniger werden, sondern zu nehmen. Also betreibe erst mal ein gründliches Refactoring bevor du an dem Programm weiterarbeitest.

Sir Rufo 6. Apr 2011 22:03

AW: FloatToStr problem wegen punkt als 1.000er markierung
 
Vor allem weil es dieses Problem dann (zu 99%) nicht mehr gibt. ;)

Gilmohr 6. Apr 2011 22:10

AW: FloatToStr problem wegen punkt als 1.000er markierung
 
also mal im ernst.
wieso bitte hängt ihr euch denn jetzt daran so auf? sicher kann man das wenn man genug programmiererfahrung hat ordentlich machen. wäre einfach mal nett wenn mir jemand sagen würde wie der befehl lautet für die variable aus der formel raus schon ohne punkt zu speichern...so wie ich es beschrieben hab.

schließlich ist die frage wie der befehl heißt, nicht wie ich meinen code verschöner.

Luckie 6. Apr 2011 22:13

AW: FloatToStr problem wegen punkt als 1.000er markierung
 
Zitat:

Zitat von Gilmohr (Beitrag 1093540)
schließlich ist die frage wie der befehl heißt, nicht wie ich meinen code verschöner.

Meinst du nicht auch, dass das eine mit dem anderem irgendwie zusammenhängt? Aber mit der Funktion Format sollte man eine Fließkommazahl auch ohne Punkt in eine Zeichenkette umwandeln.

Sir Rufo 6. Apr 2011 22:18

AW: FloatToStr problem wegen punkt als 1.000er markierung
 
"Ich schlage immer mit dem Hammer auf den Lichtschalter. Das Licht geht auch aus, aber der Schalter geht auch kaputt. Gibt es da bessere Lichtschalter, die mehr aushalten?"
"Äh, warum mit dem Hammer?"
"Das war doch nicht die Frage!"
:roll:

DeddyH 7. Apr 2011 07:15

AW: FloatToStr problem wegen punkt als 1.000er markierung
 
Da fehlen noch 2 Zeilen:
"Das macht doch keinen Sinn."
"Ich frage Dich künftig nicht mehr, Du hast ja keine Ahnung und willst nur ablenken."

rob74 7. Apr 2011 13:17

AW: FloatToStr problem wegen punkt als 1.000er markierung
 
Zitat:

Zitat von Gilmohr (Beitrag 1093534)
nur für dieses wollknäul auseinander zu nehmen und sauber zu coden fehlt mir die zeit, wissen und lust.

Ich sag's mal so: wenn Du dein Programmier-Wissen erweitern willst, solltest Du dir schon die Zeit nehmen - wenn Du dann merkst, wie einfach die Sachen sein können, wenn man es sich nicht selbst unnötig schwer macht, hast Du vielleicht auch mehr Lust am Programmieren.

Um die Frage zu beantworten: die Funktion Format kann das - wenn man Format('%f', [zahl]) nimmt, gibt sie die Zahl ohne Tausender-Trennzeichen aus, bei Format('%n', [zahl]) mit. Man kann im Format-String auch die gewünschte Anzahl Nachkommastellen angeben, Standard sind zwei. Tausender-Trennzeichen und Dezimalstellen-Trennzeichen kann man über FormatSettings.ThousandSeparator und FormatSettings.DecimalSeparator bestimmen. Die Format-Funktion kann übrigens noch viel, viel mehr, da lohnt es sich, die Hilfe-Seite durchzulesen.

Maik81ftl 9. Apr 2011 09:09

AW: FloatToStr problem wegen punkt als 1.000er markierung
 
Zitat:

Zitat von Gilmohr (Beitrag 1093540)
also mal im ernst.
wieso bitte hängt ihr euch denn jetzt daran so auf? sicher kann man das wenn man genug programmiererfahrung hat ordentlich machen. wäre einfach mal nett wenn mir jemand sagen würde wie der befehl lautet für die variable aus der formel raus schon ohne punkt zu speichern...so wie ich es beschrieben hab.

schließlich ist die frage wie der befehl heißt, nicht wie ich meinen code verschöner.

Ähmmm darf ich dir einen guten Tipp geben, den ich auch eigener Erfahrung machen muste??? sein ggf. mal etwas freundlicher, so wie sich das für mich liest, errinnert mich das an mich selber :D aber selbst ich habe gelehrnt, das man Freundlich sein sollte. sonst haben die Lieben Programmierkollegen schon einmal gar keine lust auf User wie dich.

Was allerding dein Problem angeht, so kann ich aus eigener erfahrung sagen, das ich selbst bei Zahlen ü1000 keine Probleme habe. egal ob mit oder ohne Punkt. Hab selber den Befehl FloatToStrF in verwendung.

schaut bei mir so aus.
Delphi-Quellcode:
FloatToStrf(StrtoFloat(Form3.Edit4.Text) /
                     (StrToFloat(Form3.Edit5.Text) *
                     (StrToFloat(Form3.Edit5.Text))), ffnumber, 0, 2));
Muß da allerdingt nur noch die Absicherung reinbauen, das nur die Zahlen 0...9 verwendet werden und ein , wie ein . zu handhaben ist.


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