Dienstag, 3. April 2012

CultureInfo: Chaos im .Net

eine Dataview in einer ASP-Seite, die mit der Culture-Info "de-DE" initialisiert wird, verhält sich äußerst eigenartig, wenn man hier versucht einen "Double" wert in der View abzulegen, der beispielsweise über Post-Parameter (demzufolge als String) an das Script übergeben wird.

VB Beispiel:
            dataView.Table.Columns(x).DataType = GetType(Double)
            dataView.Table.Rows(n).Item(x) = "45.2"

            Console.WriteLine(dataView.Table.Rows(n).Item(x))
 // Ausgabe: 452.0

Ebenso wird ein Cast von String nach Double in der Kultur "de-DE" m.E. falsch übersetzt, aus:

            CDbl("41.5")

wird 415.0

Wow! Das klappt ja prima! Da bekommt man ein Double im String Format und wegen einer Culture-Einstellung wird diese missinterpretiert. Also wirklich, meine lieben Damen und Herren von Microsoft. Der Datentyp der Spalte ist Double und nur weil die CultureInfo auf "de-DE" steht wird ein ","(Komma) als Dezimaltrennzeichen angenommen. Solche formate grundsätzlich auf die angegebene Kultur anzuwenden ist zwar konsequent, allerdings aus meiner Sicht nicht praktikabel, da man als Entwickler von mehrsprachigen Anwendungen hier zusätlich noch beim Konvertieren von Werten auf die Ländereinstellung achten muss.

Seit ich programmiere sind double Werte mit einem .(Punkt) als Dezimaltrennzeichen versehen, warum wird im .Net davon abgewichen? Damit die Fehleranfälligkeit erhöht wird?

Eine ganz ähnliche Problematik ergibt sich zum Beispiel bei Datumswerten unter anderem im SQL-Server. Ich frage mich wirklich, warum sowas sein muss? Reicht es nicht sich programmatisch auf EIN EINZIGES Format (zum Beispiel das US-englische) zu beschränken und lediglich bei der Ausgabe/Anzeige der Werte in der Oberfläche eine entsprechende Konvertierung vorzunehmen?

Keine Kommentare:

Kommentar veröffentlichen

Feel free to comment...