Punkt statt Komma bei float-Zahlen
-
Hallo und guten Morgen!
Ich möchte, dass alle flost Zahlen, die ich schreiben statt einem Komma einen Punkt benutzen, bis jetzt habe ich dies gefunden:
#include <SysUtils.hpp> // in header-Datei eingebunden DecimalSeparator = '.'; // in cpp-Datei global
Dies will aber nicht so funktionieren:
[C++ Fehler] Blubb_U1.cpp(34): E2303 Typname erwartet
Weiß einer an was das liegt?
Danke für eure Hilfe!
Jannika
-
Setze den DecimalSeperator nicht im globalen Bereich.
-
Tja, auf dumme Fragen wird hier wohl nicht geantwortet...
Ist ja auch richtig, hab mein Problem inzwischen gelöst!
char DecimalSeparator = '.';
Jannika
-
Super Lösung. Funktioniert halt nicht.
-
HEZ schrieb:
Super Lösung. Funktioniert halt nicht.
Also wenn sie sagt, dass es eine Lösung ist... und sie hatte ja das Problem... dann scheint es ja zu funktionieren... Eine andere Möglichkeit wäre aber aus einem Float einen String zu generieren, und in diesem das Komma durch einen Punkt zu ersetzen... und dann auszugeben... zumal Standard-Float-Werte in C++ immer einen Punkt verwenden... soweit ich mich erinnere.
-
Ja, "Lösung". Es kam keine Fehlermeldung mehr. Nur wird sich bei der ersten FloatToStr-Umwandlung (z.B.) herausstellen, dass sich überhaupt nichts an dem Komma geändert hat.
Deine Lösung gefällt mir übrigens auch nicht.
Die globale Variable (die schon existiert!!) zu ändern ist wohl wirklich die einfachste Lösung. Wenn man nicht von der fixen Idee besessen ist, dies im globalen Bereich zu tun.
-
HEZ schrieb:
Ja, "Lösung". Es kam keine Fehlermeldung mehr. Nur wird sich bei der ersten FloatToStr-Umwandlung (z.B.) herausstellen, dass sich überhaupt nichts an dem Komma geändert hat.
Deshalb kam ja auchdie Idee es als String auszugeben und im String aber vorher noch das Komma durch den Punkt zu ersetzen... z.B. sohier:
String f=FloatToStr(1.234); // f: "1,234" ShowMessage("F: \""+StringReplace(f,",",".",0)+"\""); // Ausgabe: 'F: "1.234"'
-
warum einfach wenns auch umständlich geht
-
Ja ihr habt ja Recht! :p
Also am besten ist es wohl, wenn ich mir zu Beginn des Programmes merke welcher DecimalSeparator eingestellt ist, dann stelle ich ihn beim Einlesen meiner Floatwerte auf Komma. (Die Daten bekomme ich aus einer Datei und da ist der Separator halt Komma), dann wenn ich sie in meine Datei reinschreibe, ändere ich vorher den Decimalseparator auf Punkt!
Und ganz am Schluss stelle ich ihn wieder auf den gemerkten. So kann ich mein Programm sowhl auf einem PC mit amerikanischen, wie auch deutschen Ländereinstellungen starten!Oder wie würdet ihr das machen?
-
// In Headerdatei: public: char SystemDecimalSeparator; // Vor Lesen: this->SystemDecimalSeparator = DecimalSeparator; DecimalSeparator = ','; // Vor Schreiben: DecimalSeparator = '.'; // Vor Programmende: DecimalSeparator = this->SystemDecimalSeparator;
Gute Lösung?
Und es geht einwandfrei!!!
-
Ich glaube nicht, dass der geänderte DecimalSeperator Auswirkungen auf die Systemeinstellungen ausserhalb der Anwendung hat. Würde ich mal testen. Aber so wie es ist, sieht es schon mal nach einer vernünftigen Lösung aus.
-
Stimmt, diese Änderung hat keine Auswirkungen auf die Systemeinstellungen. Wenn du das machen willst (da wäre ich aber sehr vorsichtig), dann z.Bsp. so:
char buf = '.'; SetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL,&buf));
-
Nein, das brauche ich nicht, es reicht mir vollkommen, wenn meine Datei mit Punkten geschrieben wird und das wird sie!
Grüße und ein wunderschönes WE, Jannika