Dezimaltrenner

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
ErnstVolker
Beiträge: 326
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Dezimaltrenner

Beitrag von ErnstVolker »

Hallo zusammen,

nachdem das mit den Arrays nun funktioniert rechnet mein Programm auch fleißig damit und es stell sich mir ein neues Problem. Ich habe zwar eine Lösung dafür, die gefällt mir aber nicht.
Folgendes:

Ich möchte meine Arrays in einer Textdatei ausgeben. Hierfür nutze ich "FloatToStrF" mit ffFixed. Das geht auch prima, nur daß als Dezimalzeichen ein Komma verwendet wird. Einerseits finde ich klasse, daß ich z.B. in TextEdit-Felder Zahlen wahlweise mit Komma oder Punkt eingebe kann, Lazarus rechnet mit Beiden, nur bei der Ausgabe in die Textdatei hätte ich gern einen Punkt und kein Komma. Das scheint mit der Ländereinstellung zu tun zu haben.
Gibt es einen Befehl, mit dem ich vor dem Export in die Textdatei von Komma auf Punkt umstellen kann und anschließend wieder zurück?
Mein jetziger Lösungsweg ist, daß ich zu jedem array ein zugehöriges "array of String" erzeuge und dann in einer for-Schleife mit dem Befehl"Str(X_F[i],sX_F[i])"
(das kleine "s" kennzeichnet String) umstöpsele, was mir nicht gefällt.
Ich würde gerne "FloatToStr" nutzen, nur aber mit Punkt statt Komma.

MfG

Volker

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Dezimaltrenner

Beitrag von Hitman »

Definier deine eigenen TFormatSettings und übergeb die an FloatToStr (und dann umgekehrt auch bei StrToFloat).

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Dezimaltrenner

Beitrag von monta »

Oder einfacher, vorher das Trennzeichen setzen:

Code: Alles auswählen

DecimalSeparator := '.';
Johannes

ErnstVolker
Beiträge: 326
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Dezimaltrenner

Beitrag von ErnstVolker »

Vielen Dank!

Den "DecimalSeparartor" werde ich heute Abend probieren.

Die eigene Klasse TFormatSettings ist mir noch etwas zu hoch. Hab' noch keine Vorstellung wie das geht.

Aber trotzdem DANK an ALLE!

Gruß

Volker

KOBOLD Messring GmbH
Beiträge: 155
Registriert: Mi 22. Aug 2007, 14:52
OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 65719 Hofheim am Taunus
Kontaktdaten:

Re: Dezimaltrenner

Beitrag von KOBOLD Messring GmbH »

Bin auch erst an einem ähnlichen Problem verzweifelt, dann aber gelöst:
Die Komponente TFloatSpinEdit verträgt auf einem System mit Komma-als-Länderspezifischem-Dezimaltrenner nicht den Punkt als Dezimaltrenner (über Decimalseparator := '.' eingestellt).
Hierbei jedesmal wieder zurückschalten auf ',', wenn man so was benutzt, und wieder bei der Ausgabe mit FloatToStr auf Punkt. Geht anscheinend nicht anders.

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Dezimaltrenner

Beitrag von Hitman »

ErnstVolker hat geschrieben:Vielen Dank!

Den "DecimalSeparartor" werde ich heute Abend probieren.

Die eigene Klasse TFormatSettings ist mir noch etwas zu hoch. Hab' noch keine Vorstellung wie das geht.

Aber trotzdem DANK an ALLE!

Gruß

Volker


Das ist ein simpler Record.

Code: Alles auswählen

var
  myFormatSettings: TFormatSettings;
 
begin
  myFormatSettings.DecimalSeparator := '.';
  writeln(FloatToStr(myFloat, myFormatSettings));
end;

ErnstVolker
Beiträge: 326
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Dezimaltrenner

Beitrag von ErnstVolker »

DecimalSeparator := '.';
Genau das wars was ich gesucht habe.
Vor dem Speichern auf '.' gestellt und danach wieder zurück auf ','.

Funktioniert bestens.

Danke.

Dieses Forum ist wirklich Spitze.

Gruß

Volker

Antworten