Frage

Das macht mich verrückt.Ich habe die folgende Zeichenfolge in einer ASP.NET 2.0-WebForm-Seite

string s = "0.009";

Einfach genug.Wenn meine Kultur nun Spanisch ist – also „es-ES“ – und ich versuche, die Zeichenfolge in „Double“ umzuwandeln, gehe ich wie folgt vor:

double d = Double.Parse(s, new CultureInfo("es-ES"));

Was ich erwarten würde, ist 0,009.Stattdessen bekomme ich 9.Ich verstehe, dass .NET denkt, dass es sich um ein Tausendertrennzeichen handelt, was in en-US ein Komma ist, aber sollte es nicht die Kulturinformationen, die ich an die Parse-Methode übergebe, nehmen und das richtige Format auf die Konvertierung anwenden?

Wenn ich mache

double d = 0.009D;
string formatted = d.ToString(new CultureInfo("es-ES"));

formatiert ist jetzt 0,009.Irgendjemand?

War es hilfreich?

Lösung

Es ist unter die Kultur Sie gab und die richtige Formatierung anwenden. Sie bot eine Reihe von „0.009“ und sagte, dass es Spanisch ist ... dann beschweren Sie, dass es sie als Spanisch richtig interpretiert! Verwenden Sie es nicht sagen, dass die Zeichenfolge Spanisch ist, wenn Sie wissen, dass es nicht ist.

Sie sollten die Parse-Methode der Kultur der Zeichenfolge analysiert werden, was in diesem Fall passieren en-US oder en-Gb oder InvariantCulture wäre.

Andere Tipps

Was Jess schreibt, funktioniert für mich.Nur für alle, die ausprobieren möchten, wie man eine „invariante Kultur“ erhält:es sieht so aus

double d = Double.Parse(myString, CultureInfo.InvariantCulture);

(erster Stackoverflow-Beitrag, also ja, eher marginal ;)

Sie haben es rückwärts.

Wenn Sie double d = Double.Parse(s, new CultureInfo("es-ES")); sagen, Sie fragen .NET Zeichenfolge in ein Doppel zu analysieren, unter der Annahme, dass die Zeichenfolge in dem es-ES Kultur geschrieben wird.

In der spanischen Kultur "" ist ein Tausendertrennzeichen, "0,009" ist so 9.

Wenn Sie konvertieren mit ToString (), am Ende, es ist zu sagen 0,009 in einen String wandelt die spanische Kultur mit, so dass es verwendet „“ als Dezimaltrennzeichen, und Sie ‚0.009‘ bekommen. Das Verhalten korrekt ist.

Meine Vermutung ist, dass Sie Double.Parse mit der invarianten Kultur und ToString mit der spanischen Kultur verwenden möchten, so 0,009 wird 0.009.

Ich glaube, du es falsch herum interpretieren, in ihm-ES Kultur 0,009 ist wirklich nur ein langer Weg 9 zu sagen, wie die „“ nicht das Dezimaltrennzeichen ist, also, wenn Sie für die Zeichenfolge „0,009“ fragen sein analysiert mit der es-ES Kultur Sie in der Tat die deouble 9.0 bekommen sollten. Wenn Sie es fragen: „0.009“ zu analysieren, sollten Sie eine Doppel von 0,009 erhalten.

Und falls Sie bitten, es zu Format die doppelte 0,009 sollten Sie die Zeichenfolge "0,009" in es-ES erhalten.

Sie verkennen Parsing und Formatierung. Sie erhalten 9 statt 0,009 zum ersten Mal, weil Sie eine Zeichenfolge nehmen, die in einem formated ist. Basierte Kultur und analysieren sie ein, -basierte Kultur verwendet wird. Sie müssen es analysieren, mit was auch immer Kultur wurde erstellt mit und formatieren Sie es dann mit, was Kultur, die Sie für die Anzeige soll.

double d = Double.Parse("0,009",
    NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands,
    CultureInfo.CreateSpecificCulture("es-ES"));

es-ES-Kultur "" ist eine Dezimalzahl seporator (nicht "")

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top