Convert.ToDouble - HILFE !!!



  • Hallo zusammen!

    Ich muss mich gerade mit einem recht unverstaendlichen Effekt des .NET Frameworks herumschlagen.
    Es geht um die Klasse System.Convert, oder besser gesagt um die zugehoerige Methode 'ToDouble'.

    Nun wo liegt das Problem? Nun ja, 'ToDouble' mach schlicht und ergreifen einfach nicht das was sie soll, die Umwandlung in einen double-Wert!
    D.h. das folgende statement

    double value = Convert.ToDouble("10.5");
    

    resultiert nicht wie vielleicht erwartet in value = 10.5 sondern stattdessen in value = 105 !!!

    Ehrlich gesagt, nicht so ganz nachvollziehbar!
    Das von mir verwendete .NET-Framework hat die Version 2.0.50727 ( zumindest behauptet das das Visual Studio ( 2005 ) )
    Auf meinem lokalen Rechner, auf dem ich auch uebersetze, funktioniert's!
    Nur auf meinem Notebook nicht! Dort hab ich aber auch das aktuelle Framework 2.0 installiert! Neuinstallation hat auch nichts gebracht!

    Ich referenziere in meinem Projekt u.a. die folgenden assemblies:
    Microsoft.DirectX, Microsoft.DirectX.Direct3D und Microsoft.Direct3DX
    Vielleicht hat's ja aus irgendeinem Grund was damit zu tun!? ( Microsoft happens 😉 )

    Waere toll wenn mir jemand weiterhelfen koennte!

    Vielen Dank im voraus!
    Tom



  • hat es vielleicht was mit den spracheinstellungen zu tun (deutsches komma: "," englisches komma: ".")? da gibt es glaub ich eine möglichkeit das irgendwie hin und herzuschalten. localization könnte ein stichwort sein.



  • Hallo cin_off!

    Vielen Dank fuer Deine Antwort!
    Nur leider bin ich in puncto "localization" + .NET leicht ueberfragt.
    Das hoer ich zum ersten mal!

    Wie packt man denn sowas an?

    Gruesse,
    Tom



  • Natuerlich nur wenn "localization" wirklich mit dem Problem in Verbindung steht!
    Vielleicht steckt der Wurm ja auch ganz wo anders!?
    Nur wo?



  • ok, falsches stichwort. schau dir mal folgenden link an:
    http://www.wer-weiss-was.de/theme205/article3084592.html
    der vorletzte post sollte dich zur lösung bringen. ansonsten kannst du immernoch über eine replace-funktion des strings den punkt in ein komma umwandeln und dann "converten" lassen.



  • Hallo!

    Vielen Dank, das war's tatsaechlich! In den Spracheinstellungen meines Notebooks war in der Tat als Separator fuer Fliesskommazahlen ',' angegeben. Auf '.' umgestellt und schon funktioniert's. 😃
    Ich glaub's einfach nicht! Hab jetzt 2 Tage in einer voellig anderen Ecke gesucht!

    Jetzt waer natuerlich noch interessant zu erfahren ob man an den globalen Einstellungen etwas aendern kann oder ob es wirklich notwendig ist mit jedem cast die passende CultureInfo anzugeben! ( waer ja ein bisschen umstaendlich! )
    Mit

    CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator = ".";
    

    hab ich's schon probiert, aber da funkt einem eine readonly-Einstellung dazwischen!

    Gruesse,
    Tom



  • Servus,

    es gibt einige Möglichkeiten das zu handhaben. Wohl die schlechteste ist, den derzeitigen Dezimaltrenner jedesmal umzustellen. Du kannst z.B. mit einem sog. FormatProvider arbeiten, der mehr oder weniger dafür sorgen soll, dass dein Wert immer die richtigen Zeichen enthält oder du gehst einfach hin und schreibst dir eine Methode, welche erstens überprüft welcher aktuelle Dezimaltrenner erforderlich ist (gibt ja nur 2 - "." Punkt, "," Komma), zweitens den Wert entsprechend durchackert und drittens die Zeichen alle ersetzt.

    Ansonsten sind noch meine Anhaltspunkte www.codeproject.com. Dort gibt es einige Artikel und Beiträge zu dem Thema.

    Btw. dieses "Problem" sollte man nicht vernachlässigen.

    mfg
    Hellsgore


Anmelden zum Antworten