StrToFloat mit beiden Dezimaltrennern

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Re: StrToFloat mit beiden Dezimaltrennern

Beitrag von creed steiger »

Mathias hat geschrieben:Wieso mussten die dazumal in der DE ein , anstelle des . einführen ?

Jeder PC arbeiten intern mit einem . als Dezimal-Trenner.
Es gab auch mal eine Zeit vor Pc´s ;)

Historisch gesehen gibt es halt alte Strukturen.

Banken, Versicherungen etc. verwenden Sachen da würde es dich grausen, aber es ist einfach so.

Da draussen gibt es mehr als du denkst, daß einfach "anders" ist als der IBM/Microsoft/DOS/x86 PC.

ruewa
Beiträge: 153
Registriert: Sa 12. Apr 2014, 14:43

Re: StrToFloat mit beiden Dezimaltrennern

Beitrag von ruewa »

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

Mathias
Beiträge: 6940
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: StrToFloat mit beiden Dezimaltrennern

Beitrag von Mathias »

das ist halt so - da mußt Du Dich bei den Protagonisten der Französischen....
...ganz eigenes Süppchen kochen:
Hast du die aktuelle PM gelesen ? :wink:
Da draussen gibt es mehr als du denkst, daß einfach "anders" ist als der IBM/Microsoft/DOS/x86 PC.
Aber man hätte sich am Computer anpassen können.
Bei den Programmiersprachen hat dies bestens geklappt, egal ob Basic, Java oder Pascal.
Wieso sollte das nicht auch bei Execl, Datenbanken und Konsorten nicht gehen.

Ich habe auch nie einen gewöhnlichen Taschenrechner mit einem , gesehen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

ruewa
Beiträge: 153
Registriert: Sa 12. Apr 2014, 14:43

Re: StrToFloat mit beiden Dezimaltrennern

Beitrag von ruewa »

Mathias hat geschrieben:Hast du die aktuelle PM gelesen ? :wink:
Oha! Ich wußte erst gar nicht, was Du meinst, hab's jetzt aber mal gegoogelt. Nein, das ist purer Zufall, dieses Blatt hatte ich noch nie in der Hand (und hab's auch zukünftig nicht vor). Die scheinen ihre Story einfach bloß von Alder abgeschrieben zu haben, 13 Jahre nach Erscheinen des Buchs... Ist schon ein starkes Stück - Qualitätsschmierenjournalismus eben...

Nein, das Alder-Buch ist das Original (das hatte ich vor 10 Jahren schon gelesen). Ich möchte aber wetten, daß die das nicht als Quelle erwähnt haben. Ein Grund mehr, solche Käseblättchen links liegen zu lassen...

Gruß Rüdiger

Mathias
Beiträge: 6940
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: StrToFloat mit beiden Dezimaltrennern

Beitrag von Mathias »

Ein Grund mehr, solche Käseblättchen links liegen zu lassen...
Ich finde dies überhaupt kein Käseblatt, dort stehen doch sehr viel interessante Sachen drinnen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: StrToFloat mit beiden Dezimaltrennern

Beitrag von Antrepolit »

Mathias hat geschrieben:(...)
Aber man hätte sich am Computer anpassen können.
Bei den Programmiersprachen hat dies bestens geklappt, egal ob Basic, Java oder Pascal.
Wieso sollte das nicht auch bei Execl, Datenbanken und Konsorten nicht gehen.

Ich habe auch nie einen gewöhnlichen Taschenrechner mit einem , gesehen.
Daran erkennt man, dass du offenbar nicht verstehst, worum es bei der Programmierung geht. Der Programmierer soll die Probleme zwischen Benutzer und Computer lösen und nicht den Benutzer zwingen, sich der Maschine anzupassen. Programmiersprachen sind dazu da, dass man den Computer entsprechend Benutzerfreundlich programmieren kann. Und deshalb muss der Software-Entwickler mit dem Punkt-System klarkommen und der deutsche Nutzer nicht. Hier werden sich die Benutzer gewiss nicht an deine Vorstellung anpassen, denn die wollen mit einem Computer bloß ihre Arbeit erledigen und deren ARbeit ist nicht das Programmieren.

Ich erlebe es von Zeit zu Zeit, dass der Programmierer seine Probleme dem Benutzer zuschiebt, statt sie zu lösen. Und das ist der falsche Weg. Zurecht wenden Hochschulen und Universitäten Vorlesungen dafür auf, in denen das Verstehen der Bedürfnisse der Benutzer im Vordergrund steht. Doch auch hier sitzen Leute im Hörsaal, die später rausmarschieren, ohne etwas verstanden zu haben.

Doch die Sekretärin erwartet eben von Excel, dass das Ding mit deutschen Kommazahlen rechnen kann. Was hat sie auch mit dem anglistischen Punkt-System zu tun? Ihren Job gab es schon vor der Einführung von EDV bzw. IT. Und das Komma-Punkt-Problem ist ein absolutes Standard-Problem und es gibt genügend Standard-Lösungen dazu, ohne dass man Spaghetti-Code basteln muss.
Grüße, Antrepolit

care only if your os is really burning

mischi
Beiträge: 206
Registriert: Di 10. Nov 2009, 18:49
OS, Lazarus, FPC: macOS, 10.13, lazarus 1.8.x, fpc 3.0.x
CPU-Target: 32Bit/64bit

Re: StrToFloat mit beiden Dezimaltrennern

Beitrag von mischi »

Mathias hat geschrieben:Wieso mussten die dazumal in der DE ein , anstelle des . einführen ?

Jeder PC arbeiten intern mit einem . als Dezimal-Trenner.

Auch FPC verwendet diesen, wen man den Quelltext von StrToFloat genauer anguckt, wird ein Val verwendet welches auch eine . verwendet.

Als ich noch kein Internet hatte, habe ich nicht mal gewusst, das gewisse Länder ein , verwenden.
Meine wilde Spekulation: Bei Software für Buchhaltung in Deutschland ist das Komma zwingend vorgeschrieben. ;-)
MiSchi macht die fink-Pakete

Mathias
Beiträge: 6940
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: StrToFloat mit beiden Dezimaltrennern

Beitrag von Mathias »

Doch die Sekretärin erwartet eben von Excel, dass das Ding mit deutschen Kommazahlen rechnen kann. Was hat sie auch mit dem anglistischen Punkt-System zu tun?
In der Schule hatten wir auch ein , als Trenner und die ersten Computer, z.B. C64 habe schon ein . gebraucht.
Auch CNC-Maschinen haben einen . als Trenner.
Man hat sich sehr schnell daran gewöhnt, da es auf Papier anders ist als auf dem Computer.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Re: StrToFloat mit beiden Dezimaltrennern

Beitrag von creed steiger »

Wenn ich mir so meinen Zehnerblock anschaue, ist da auch ein Komma ;)

Mathias
Beiträge: 6940
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: StrToFloat mit beiden Dezimaltrennern

Beitrag von Mathias »

Wenn ich mir so meinen Zehnerblock anschaue, ist da auch ein Komma
Bei mir hat es dort einen Punkt (CH-Tastatur). :wink:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: StrToFloat mit beiden Dezimaltrennern

Beitrag von Antrepolit »

Mathias hat geschrieben:
Doch die Sekretärin erwartet eben von Excel, dass das Ding mit deutschen Kommazahlen rechnen kann. Was hat sie auch mit dem anglistischen Punkt-System zu tun?
In der Schule hatten wir auch ein , als Trenner und die ersten Computer, z.B. C64 habe schon ein . gebraucht.
Auch CNC-Maschinen haben einen . als Trenner.
Man hat sich sehr schnell daran gewöhnt, da es auf Papier anders ist als auf dem Computer.
Heute haben auch CNC-Maschinen ein Komma, wir leben im 21. Jahrhundert. Was machst du denn erst, wenn da Zeichensatzprobleme auf dich zukommen, wenn du schon bei einem simplen Punkt-Komma-Problem erwartest, dass sich die Benutzer anpassen?
Grüße, Antrepolit

care only if your os is really burning

Antworten