String to Double Konvertierung
-
Hallo,
ich lese von der seriellen Schnittstelle eine Zeile ein, die dann in eine double Variable konvertiert wird:
d = Convert::ToDouble(serialPort1->readLine());
Die eingelesene Zahl hat grundsätzlich immer einen "." als Dezimaltrenner.
Wenn ich in der Windows-Systemsteuerung den "." als Dezimaltrenner einstelle, dann funktioniert die Konvertierung.
Wie kann ich erreichen, dass die Konvertierung unabhängig von den länderspezifischen Einstellungen funktioniert?
Das muss irgendwie mit IFormatProvider gehen, aber leider habe ich dazu kein Beispiel gefunden.Gruss
Michael
-
Guckst Du halt hier:
http://channel9.msdn.com/forums/TechOff/136463-Culture-specific-ConvertToDouble/Das mit NumberFormatInfo dürfte für Interessant sein.
Simon
-
Hallo,
theta schrieb:
Guckst Du halt hier:
http://channel9.msdn.com/forums/TechOff/136463-Culture-specific-ConvertToDouble/Das mit NumberFormatInfo dürfte für Interessant sein.
SimonJa, das geht schon in die richtige Richtung. Ich habe jetzt mal folgenden Code ausprobiert:
System::Globalization::NumberFormatInfo info = gcnew System::Globalization::NumberFormatInfo(); info.NumberDecimalSeparator = "."; info.NumberGroupSeparator = ",";
und weiter unten
d = Convert::ToDouble(serialPort1->ReadLine(),info);
Es kommt folgende Fehlermeldung, mit der ich nichts anfangen kann:
Form1.h(114) : error C3767: 'System::Globalization::NumberFormatInfo::NumberFormatInfo': candidate function(s) not accessible
Gruss
Michael
-
Hallo,
jetzt habe ich selber die Lösung gefunden. So geht es:
System::Globalization::NumberFormatInfo^ info = gcnew System::Globalization::NumberFormatInfo(); info->NumberDecimalSeparator = "."; info->NumberGroupSeparator = ",";
d = Convert::ToDouble(serialPort1->ReadLine(),info);
Gruss
Michael
-
Benutz doch einfach C#. Ist einfacher und bietet weniger Fallstricke.
Simon