![]() |
StrToInt('1,234') gibt es da was für?
Ich speichere eine Zahl folgendermaßen ab
Delphi-Quellcode:
Auf einem englisch eingstellten Windows kommt da sowas wie 1,234 raus. Auf einem deutschen PC steht dort 1.234.
Result := FloatToStrF(Num, ffNumber, 8, 0);
Wie kann ich diese Zahl system-unabhängig einlesen? 1.234 lässt sich mit StrToInt() auf einem deutschen Windows ohne Fehler einlesen. |
AW: StrToInt('1,234') gibt es da was für?
Ist es nicht umgekehrt? Im deutschen ist das Komma das Dezimaletrennzeichen, im englischen der Punkt. Also sollte auf einem System mit englischen Regianaleinstellungen 1.234 rauskommen.
Was ist eigentlich genau die Eingabe und ist der Trenner, die Dezimaltrennung oder die Gruppierung? Und berücksichtigt FloatToStr nicht die Regionaleinstellungen? Das heißt, wenn in der Datenquelle 1.234 englenglsich steht und formatiert das deutsch wird 1,234 angezeigt. |
AW: StrToInt('1,234') gibt es da was für?
Zitat:
Zitat:
|
AW: StrToInt('1,234') gibt es da was für?
Hallo,
da als Trenner ja nur Punkt oder Komma in Frage kommen, würde ich mich für eine Variante entscheiden. z.B. bei Punkt StrReplace Komma durch Punkt (auf Verdacht) und dann StrToFloatDef mit dem entsprechenden FormatSetting. ![]() |
AW: StrToInt('1,234') gibt es da was für?
Ich begehe ohnehin einen Fehler. Die Daten die geschrieben werden dienen einer Statistik und vorher formatiere ich diese eine Zahl noch.
Das habe ich jetzt rausgenommen. |
AW: StrToInt('1,234') gibt es da was für?
Ich würde Gruppentrenner komplett entfernen. In Indien z.B. gruppiert man nichtmals strikt in 3er Päckchen, sondern... äh, irgendwie anders :D
Um also universell zu ein, würde ich sämtliche Punktierung und Spaces vorab entfernen - geht bei Ints ja zum Glück recht einfach ohne was kaputt zu machen. |
AW: StrToInt('1,234') gibt es da was für?
Also ist der Punkt und das Komma die Gruppierung. Da hilft, glaube ich, nur StringReplace.
|
AW: StrToInt('1,234') gibt es da was für?
Zitat:
Mit
Delphi-Quellcode:
sollte es aber gehen - auch bei '1,234'.
StrToInt('1.234'.Replace('.', '').Replace(',', ''))
|
AW: StrToInt('1,234') gibt es da was für?
Zitat:
|
AW: StrToInt('1,234') gibt es da was für?
Die wichtigste Frage die hier nirgendwo beantwortet wird:
Soll der Wert der Zahl 1234 oder 1,234 sein? Ich glaube ansonsten reden wir aneinander vorbei. |
AW: StrToInt('1,234') gibt es da was für?
Ich speichere die Zahl jetzt ohne Formatierung ab. Aber vorher war es systemabhängig ob 1.234 oder 1,234 gespeichert wurde. Intern sollte es aber als 1234 verarbeitet werden.
Das sind statistische Daten. Deswegen habe ich die Formatierung jetzt rausgenommen. Die findet jetzt woanders statt. |
AW: StrToInt('1,234') gibt es da was für?
Zitat:
|
AW: StrToInt('1,234') gibt es da was für?
Deswegen wollte ich die explizit Wissen haben, ob es sich um ein Dezimaltrennzeichen oder um ein Gruppierungstrennzeichen handelt.
|
AW: StrToInt('1,234') gibt es da was für?
Ich frage Windows, was der Nutzer für ein Tausendertrennzeichen hat und lösche dieses, bevor ich irgendwas von String to Kommazahl umwandel.
Delphi-Quellcode:
Extended analog.
function StrToCurrLocal(const s: string): Currency;
begin Result := StrToCurr(StringReplace(s, GetLocaleChar(GetThreadLocale(), LOCALE_STHOUSAND, #0), '', [rfReplaceAll])); end; |
AW: StrToInt('1,234') gibt es da was für?
Zitat:
|
AW: StrToInt('1,234') gibt es da was für?
Zitat:
|
AW: StrToInt('1,234') gibt es da was für?
Wenn für Nachkommastellen Null angegeben ist, dann können es doch eigentlich nur Tausendertrenner sein.
|
AW: StrToInt('1,234') gibt es da was für?
Ist mittlerweile alles geklärt.
|
AW: StrToInt('1,234') gibt es da was für?
Zitat:
|
AW: StrToInt('1,234') gibt es da was für?
Zitat:
Zitat:
So, Thema fertig. Deckel zu und Licht aus. 8-) |
AW: StrToInt('1,234') gibt es da was für?
Wieso denn nicht einfach, so wie vorgesehen, mit den Formateinstellungen arbeiten?
Unter XE2 oder neuer:
Delphi-Quellcode:
Zwischen D2009 und XE2 musstest du die FormatSettings-Variable zwischenspeichern, bearbeiten und wiederherstellen, und dort manuell den DezimalSeparator auf
1.234.ToString(TFormatSettings.Invariant) // Ergibt '1.234', auch auf deutschen Systemen
Delphi-Quellcode:
setzen.
'.'
Vor 2009 kenne ich keine Möglichkeit mehr, wie das ging, weil ich mit so alten Versionen schon seit Jahren nicht mehr arbeite. |
AW: StrToInt('1,234') gibt es da was für?
Zitat:
Ich benutze immer noch treudoof eine lokale TFormatSettings-Variable und setze den Decimalseperator auf "." und den ThousendSeperator auf ",". Dieses TFormatSettings.Invariant ist ziemlich cool, da werde ich mal ein paar Stellen im Code aufräumen können. :-) |
AW: StrToInt('1,234') gibt es da was für?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:55 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