Mathias,
das ist halt so - da mußt Du Dich bei den Protagonisten der Französischen Revolution beschweren, die einen gewaltigen Schritt in Richtung "Globalisierung" unternahmen (bloß daß man damals dieses Wort noch nicht kannte), als sie das Metrische System und dessen Schreibweise einführten (zuvor gab es allein in Frankreich 800 verschieden Maßbezeichnungen mit - schlimmer noch - geschätzten 250.000 Bedeutungen - jedes Dorf hatte eigene Längen-, Flächen-, Volumen- und Gewichtsmaße). Die Anglo-Amerikaner haben sich damals übrigens geweigert, das metrische System zu übernehmen - noch heute stürzen gelegentlich Raketen deshalb ab... Und okay, die Schweizer mußten natürlich ihr
ganz eigenes Süppchen kochen:
Code: Alles auswählen
In der Schweiz ist die Verwendung von Punkt oder Komma als Dezimaltrennzeichen uneinheitlich; beide werden üblicherweise immer als „Komma“ gelesen. Auch an den Schulen wird eine nicht einheitliche Praxis verfolgt: Die Schulen des Kantons St. Gallen wie auch des Kantons Zürich lehren beispielsweise den Dezimalpunkt. Es kommt vor, dass in der Unterstufe/Primarschule das Komma (wie es gesprochen wird), ab der Mittelstufe der Punkt gelehrt wird.
Leider haben sich der 400°-Kreis und die Zeitrechnung in 10 Stunden a 100 Minuten a 100 Sekunden pro Tag nicht durchgesetzt - solche Uhren gibt es noch in Museen zu bewundern. Absolut empfehlenswerte Lektüre zu diesem Thema:
Ken Alder: Das Mass der Welt.
Unser Problem ist nun, daß in der
einen Hälfte der Welt das Komma als Dezimaltrenner und der Punkt als Tausender-Separator verwendet wird, während das in der anderen Hälfte der Welt genau umgekehrt herum gehandhabt wird. Mit den
DefaultFormatSettings funktioniert es in Free Pascal eben solange, solange die per
StrToFloat eingelesene Zahl auf demselben Computer zuvor via
FloatToStr in einen String umgewandelt wurde. Und mit Vorbehalt funktioniert das auch noch im gleichen Sprachraum.
Aber sobald man Fremdstrings einlesen will, hat man ein echtes Problem. Ich sehe auch nicht, wie man das auflösen kann. Sicher könnte man eine Routine schreiben, die eine Reihe von Bedingungen abprüft:
- Der Dezimaltrenner kann nur einmal auftauchen, der ThousandsSeparator mehrfach.
- Wenn sowohl Punkt als auch Komma im String vorkommen, muß der Dezimaltrenner an der rechtesten Position stehen.
- Tausenderzeichen können nur (und müssen, wenn vorhanden, dann auch durchgehend) im Dreierabstand vorkommen.
Aber bei all dem lassen sich immer auch Fälle denken, die nicht eindeutig sind. Was heißt '1,001' - Eintausendeins oder Einskommanullnulleins? Im Zweifel könnte man nun sagen, dann gilt halt der Eintrag in den DefaultFormatSettings. Aber egal, wie man's anstellt, unter eine bestimmte Fehleranfälligkeit kommt man einfach nicht - ich sehe auch keinen Weg, das Problem umfassend zu lösen.
Gruß Rüdiger