Systemstandarts "," und "."

Systemstandarts "," und "."

Beitragvon Maik81ftl » 30. Jun 2011, 09:30 Systemstandarts "," und "."

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
Maik81ftl
 
Beiträge: 619
Registriert: 9. Mär 2011, 16:34
Wohnort: seit 01.06.2011 in Wahlstedt
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4) | 
CPU-Target: 64Bit
Nach oben

Beitragvon corpsman » 30. Jun 2011, 11:39 Re: Systemstandarts "," und "."

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
corpsman
 
Beiträge: 1087
Registriert: 28. Feb 2009, 08:54
Wohnort: Stuttgart
OS, Lazarus, FPC: Linux Mint Mate, Lazarus SVN Trunk, FPC 3.0 | 
CPU-Target: 64Bit
Nach oben

Beitragvon Maik81ftl » 30. Jun 2011, 12:21 Re: Systemstandarts "," und "."

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
Maik81ftl
 
Beiträge: 619
Registriert: 9. Mär 2011, 16:34
Wohnort: seit 01.06.2011 in Wahlstedt
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4) | 
CPU-Target: 64Bit
Nach oben

Beitragvon carli » 30. Jun 2011, 16:38 Re: Systemstandarts "," und "."

Auch unter Linux ist der DecimalSeparator ",", wenn man auf Deutsch stellt.
Meine Lösung war, eine eigene Float-Parsing Routine zu implementieren.
carli
 
Beiträge: 660
Registriert: 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2 | 
CPU-Target: 64Bit
Nach oben

Beitragvon corpsman » 30. Jun 2011, 17:50 Re: Systemstandarts "," und "."

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
corpsman
 
Beiträge: 1087
Registriert: 28. Feb 2009, 08:54
Wohnort: Stuttgart
OS, Lazarus, FPC: Linux Mint Mate, Lazarus SVN Trunk, FPC 3.0 | 
CPU-Target: 64Bit
Nach oben

Beitragvon carli » 30. Jun 2011, 18:43 Re: Systemstandarts "," und "."

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.
carli
 
Beiträge: 660
Registriert: 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2 | 
CPU-Target: 64Bit
Nach oben

Beitragvon Maik81ftl » 1. Jul 2011, 11:58 Re: Systemstandarts "," und "."

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
Maik81ftl
 
Beiträge: 619
Registriert: 9. Mär 2011, 16:34
Wohnort: seit 01.06.2011 in Wahlstedt
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Socke » 3. Jul 2011, 00:11 Re: Systemstandarts "," und "."

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
Socke
Lazarusforum e. V.
 
Beiträge: 2664
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

• Themenende •

Zurück zu MacOS



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried