Systemstandarts "," und "."

Antworten
Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Systemstandarts "," und "."

Beitrag von Maik81ftl »

Moin Moin

Hab danke der Gestellten *.exe noch ein bug gefunden, wo ich weiß, wie ich es lösen kann. Bevor ich mich jedoch da ran hänge wollt ich mal fragen, wie das bei Mac ausschaut? werden da Zahlen mit 12345.67890 oder mit 12345.67890 dargestellt.

Grund für diese Frage ist folgende Meldung.

Code: Alles auswählen

"x.xx" is an Invalid float.
dies erhalt ich zumindest bei verwenung einer exe via Ubuntu.

Wenn es auch irgendwie eine Const gibt, die auf die Systemeinstellung zugreift, wäre mir auch die willkommen
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

corpsman
Beiträge: 1118
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus SVN Trunk, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Systemstandarts "," und "."

Beitrag von corpsman »

Da gibts etwas das heist :

DecimalSeparator

den kannst du einfach selbst setzen und schon weist du sicher wie deine App das handelt...
--
Just try it

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: Systemstandarts "," und "."

Beitrag von Maik81ftl »

corpsman hat geschrieben:Da gibts etwas das heist :

DecimalSeparator

den kannst du einfach selbst setzen und schon weist du sicher wie deine App das handelt...


will nicht selber zuweisen. ich suche eine Const, die den Systemwert läd. damit ich bei

Code: Alles auswählen

StrToFloat(Value);
keine Umwandlungsprobleme bekomme.

Beste Beispiel.

Windows rechnet mit "1,65" wenn ich da aber eine brechnung mit "1.65" reinstecke erhalte ich einen Fehler. dies will ich bei MacOS gleich ausschließen.

noch mach ich das via

Code: Alles auswählen

{$IFDEF WINDOWS}
        if _temp[E_leng] = '.' then Edit[Count, 1]:= _temp[E_leng] + ',';
//      {$ENDIF}
//      {$IFDEF LINUX}
        {$ESLE}
        if _temp[E_leng] = '.' then Edit[Count, 1]:= _temp[E_leng] + '.';
        {$ENDIF}
scheint mir aber auch nicht das Gelbe vom ei zu sein.
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

carli
Beiträge: 660
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Systemstandarts "," und "."

Beitrag von carli »

Auch unter Linux ist der DecimalSeparator ",", wenn man auf Deutsch stellt.
Meine Lösung war, eine eigene Float-Parsing Routine zu implementieren.

corpsman
Beiträge: 1118
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus SVN Trunk, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Systemstandarts "," und "."

Beitrag von corpsman »

Wenn du's nicht setzen willst, dann musst du's ermitteln, weil es Sprachabhängig und nicht Betriebssystem abhängig ist. Und selbst bei einem Deutschen System kann mans von Hand auf "." stellen, wenn man das will

Code: Alles auswählen

function getsystemdecimalseperator:char;
var tmp:String;
begin
  tmp := floattostr(1.1);
  result := tmp[2];
end;
--
Just try it

carli
Beiträge: 660
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Systemstandarts "," und "."

Beitrag von carli »

corpsman hat geschrieben:Wenn du's nicht setzen willst, dann musst du's ermitteln, weil es Sprachabhängig und nicht Betriebssystem abhängig ist. Und selbst bei einem Deutschen System kann mans von Hand auf "." stellen, wenn man das will

Code: Alles auswählen

function getsystemdecimalseperator:char;
var tmp:String;
begin
  tmp := floattostr(1.1);
  result := tmp[2];
end;


Da kannst du auch gleich "DecimalSeparator" abfragen.

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: Systemstandarts "," und "."

Beitrag von Maik81ftl »

carli hat geschrieben:Auch unter Linux ist der DecimalSeparator ",", wenn man auf Deutsch stellt.
Meine Lösung war, eine eigene Float-Parsing Routine zu implementieren.

Da frag ich mich, warum lazarus bei mir mit . rechnet, wenn auf Deutsch , verwendet wird? Die selbe anwendung für Windows compaliert arbeitet mit , bei Eingabe von . hab ich unter dem Selben BS einen Fehler.

corpsman hat geschrieben:Wenn du's nicht setzen willst, dann musst du's ermitteln, weil es Sprachabhängig und nicht Betriebssystem abhängig ist. Und selbst bei einem Deutschen System kann mans von Hand auf "." stellen, wenn man das will

Code: Alles auswählen

function getsystemdecimalseperator:char;
var tmp:String;
begin
  tmp := floattostr(1.1);
  result := tmp[2];
end;


d.H. C verwendet ein anderes Zeichen als Lazarus? egal welches Betriebssystem? ein glück schreib ich nur unter Lazarus.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------

Hab nochmal 'ne nacht drüber geschlafen. wenn ich DecimalSeparator richtig verstehe, liest der auch die Systemwerte?
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

Socke
Lazarusforum e. V.
Beiträge: 2779
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Systemstandarts "," und "."

Beitrag von Socke »

Maik81ftl hat geschrieben:Da frag ich mich, warum lazarus bei mir mit . rechnet, wenn auf Deutsch , verwendet wird? Die selbe anwendung für Windows compaliert arbeitet mit , bei Eingabe von . hab ich unter dem Selben BS einen Fehler.


Der Free Pascal Compiler erwartet beim Übersetzen des Quelltextes Fließkommazahlen immer mit Punkt und nie mit Komma (ansonsten müsste man den Quelltext ja auch für jedes Betriebssystem, auf dem man ein Programm übersetzen möchte, anpassen).

Der Code

Code: Alles auswählen

var
  f: Float = 1.1;
  ShowMessage(FloatToStr(f));
enthält also einen Punkt, die Ausgabe mit FloatToStr() kann aber davon abweichen — je nachdem, was beim Benutzer eingestellt ist und ob diese Werte eingelesen werden. Unter Linux kannst du das Einlesen ganz einfach der Unit clocale überlassen (einfach im Programm einbinden) und unter Windows bin ich gerade überfragt.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten