Entwickler-Ecke

Sonstiges (Delphi) - inttofloat , komma auf internationalen System rechnen


Biarchiv - Mo 31.07.06 11:46
Titel: inttofloat , komma auf internationalen System rechnen
Hallo,

mir ist aufgefallen das bei meinen Programmen vorallem auf Chinesischen oder
Englischen Win Versionen zu abstürzen kommt.

Die Fehler fand ich bei:
versch. Datumsanzeigen
Sowie beim Rechnen...

Kann man inttofloat / floattoint mit einem komma gesetzt überall verwenden oder
muss wenn das delphi in deutsch ist das dann in einem Punkt gewandelt werden?


aim65 - Di 01.08.06 10:10

Laß mich mal raten - ein paar Fragen:

1) Meine Delphi's (D3, D7) kennen weder InttoFloat noch FloattoInt.

2) Hatte ähnliche Probleme mit englischer Windows-Version, weiß aber nicht, ob das dein Problem trifft.

IMHO tritt so etwas immer nur bei Umwandlungen von Zahlenstrings in FP-Zahlen (z.B., bei Eingaben) auf, aber nicht bei internen Rechnungen, bzw. Zahlenausgaben, bei denen Windows den Dezimalpunkt ("DecimalSeparator") gemäß Ländereinstellung wählt (habe keine Erfahrung mit chinesischen Versionen).

Probleme traten immer dann auf, wenn ich z.B. in Edit-Feldern schon Zahlenstrings vorbesetzt hatte (" 12,345 " geht nicht in der englischen Version).
Hab' mir daher folgendes angewöhnt:
1) Initialwerte nie als Zahlenstring sondern als FP-Zahl im Source definieren (Bei Integern natürlich nicht nötig). Im Source wird immer der DezimalPunkt verlangt - Delphi rechnet auch damit. Falls diese Zahlen sichtbar werden sollen, eben mit ...FloatToStr anzeigen. Windows macht den Rest.
2) Bei Eingaben entsprechendes Filter vorsehen. Hier ein Beispiel aus einer KeyPress-Routine:

Delphi-Quelltext
1:
2:
if Key in [',','.',';',':'then   //Correct for accidental Shift-Key
      Key :=DecimalSeparator;      //Replace with system Decimal Point/Comma

Ich hoffe, daß du damit etwas anfangen kannst.


Lannes - Di 01.08.06 11:25

Hallo,

wenn man z.B in einem Edit-Feld einen Zahlenstring vorbesetzten will, kann man auch folgendes z.B in OnCreate der Form realisieren:

Delphi-Quelltext
1:
Edit.Text := '12'+DecimalSeparator+'345';                    
Das ist dann auch unabhängig von den Systemeinstellungen des jeweiligen Endanwender-Pc. Weitere Infos dazu auch in der Delphi-Hilfe > "Formatvariablen"


F34r0fTh3D4rk - Di 01.08.06 11:34

genau, zerlege deine floats in vor und nachkomme stellen und füge sie mit dem dezimal separator zusammen, du kannst dir dafür ja eine eigene art floattostr bauen