Domanda

Questo mi sta facendo impazzire. Ho la seguente stringa in un WebForm ASP.NET 2.0 Pagina

string s = "0.009";

abbastanza semplice. Ora, se la mia cultura è lo spagnolo - che è "es-ES" - e cerco di convertire la stringa in doppio, faccio la seguente:

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

quello che mi aspetto è 0,009. Invece, ho 9. Capisco che .NET pensa che sia un separatore delle migliaia, che a sua it-IT è una virgola, ma non dovrebbe prendere informazioni cultura sto passando al metodo di analisi e di applicare il formato corretto per la conversione?

Se faccio

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

formattato è ora 0,009. Chiunque?

È stato utile?

Soluzione

è prendendo la cultura ti ha dato e applicando la formattazione corretta. È fornito una serie di "0.009" e ha detto che che era spagnolo ... poi si lamentano che ha interpretato correttamente lo spagnolo! Non dire che che la stringa è lo spagnolo quando si sa che non è così.

Si dovrebbe passare al metodo Parse la cultura della stringa analizzata, che in questo caso sarebbe en-US o en-GB o InvariantCulture.

Altri suggerimenti

ciò che la scrittura di Jess funziona per me. solo per tutti coloro che avevo bisogno di provare come ottenere "cultura invarianti": sembra questo

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

(primo post StackOverflow, così sì, piuttosto marginale;)

Hai all'indietro.

Quando si dice double d = Double.Parse(s, new CultureInfo("es-ES"));, si sta chiedendo .NET per analizzare la stringa in un doppio, partendo dal presupposto che la stringa è scritto nella cultura es-ES.

Nella cultura spagnola, "" è un separatore delle migliaia, così "0,009" è 9.

Quando si converte utilizza ToString (), alla fine, sta dicendo convertire 0,009 a una stringa utilizzando la cultura spagnola, in modo che utilizza "" come separatore decimale, e si ottiene '0009'. Il comportamento è corretto.

La mia ipotesi è che si desidera utilizzare Double.Parse con la cultura invarianti, e ToString con la cultura spagnola, in modo da 0,009 diventa 0009.

Penso che si sta interpretando nel modo sbagliato intorno, in es-ES cultura 0.009 è in realtà solo un lungo modo di dire 9, come il "" non è il separatore decimale, quindi se chiedete la stringa "0.009" per essere analizzato con la cultura es-ES si dovrebbe infatti ottenere il deouble 9.0. Se chiedete ad analizzare "0009" si dovrebbe ottenere un doppio di 0,009.

Allo stesso modo, se si chiede al formato il doppio 0.009 si dovrebbe ottenere la stringa "0009" in es-ES.

Si sta scambiando l'analisi e la formattazione. Si ottiene 9 invece di .009 la prima volta perché si prende una stringa che viene formattato in una cultura-based. E analizzarlo usando una cultura basata su. È necessario analizzare utilizzando qualsiasi cultura è stato creato con e poi formattarlo utilizzando qualsiasi cultura che si desidera per la visualizzazione.

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

Nella cultura es-ES "" è un seporator decimale (non "")

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top