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.
    Simon

    Ja, 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


Anmelden zum Antworten