Question

Ça me rend fou.J'ai la chaîne suivante dans une page WebForm ASP.NET 2.0

string s = "0.009";

Assez simple.Maintenant, si ma culture est espagnole - c'est-à-dire "es-ES" - et que j'essaie de convertir la chaîne en Double, je fais ce qui suit :

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

ce à quoi je m'attendrais, c'est 0,009.Au lieu de cela, j'en reçois 9.Je comprends que .NET pense qu'il s'agit d'un séparateur de milliers, qui en-US est une virgule, mais ne devrait-il pas prendre les informations culturelles que je transmets à la méthode d'analyse et appliquer le format correct à la conversion ?

Si je fais

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

formaté est maintenant 0,009.N'importe qui?

Était-ce utile?

La solution

est en prenant la culture que vous avez donné et l'application de la mise en forme correcte. Vous avez fourni une chaîne de « 0,009 » et dit que ce qu'il était espagnol ... alors vous plaindre que correctement interprété comme l'espagnol! Ne dites pas à ce que la chaîne est l'espagnol quand vous savez que ce n'est pas.

Vous devez passer la méthode Parse la culture de la chaîne en cours d'analyse, qui dans ce cas serait en États-Unis ou en-Gb ou InvariantCulture.

Autres conseils

ce que l'écriture de Jess fonctionne pour moi.juste pour tous ceux qui auraient besoin d'essayer comment obtenir une "culture invariante":ça ressemble à ça

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

(premier post stackoverflow, donc oui, plutôt marginal ;)

Vous avez en arrière.

Quand vous dites double d = Double.Parse(s, new CultureInfo("es-ES"));, vous demandez .NET pour analyser votre chaîne en double, en supposant que la chaîne est écrit dans la culture es-ES.

Dans la culture espagnole, "" est un séparateur de milliers, donc « 0,009 » est 9.

Lors de la conversion à l'aide ToString (), à la fin, il est dit convertir 0,009 à une chaîne en utilisant la culture espagnole, il utilise « » comme séparateur décimal, et vous obtenez « 0009 ». Le comportement est correct.

Je suppose que vous voulez utiliser Double.Parse avec la culture invariante et ToString avec la culture espagnole, donc 0,009 devient 0009.

Je pense que vous interprétez dans le mauvais sens, dans la culture es-ES 0,009 est vraiment juste une façon détournée de dire 9, comme le « » est pas le séparateur décimal, donc si vous demandez la chaîne « 0,009 » être parsé avec la culture es-ES vous devriez en effet obtenir le deouble 9.0. Si vous demandez à analyser « 0009 » vous devriez obtenir un double de 0,009.

De même, si vous demandez à format la double 0,009 vous devriez obtenir la chaîne "0009" en es-ES.

Vous vous trompez et l'analyse syntaxique de mise en forme. Vous obtenez 9 au lieu de 0,009 la première fois parce que vous prenez une chaîne qui est dans une culture formated basée. Et analyser à l'aide d'une culture à base. Vous devez analyser à l'aide quelle que soit la culture, il a été créé avec et puis formatez à l'aide quelle que soit la culture que vous voulez pour l'affichage.

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

Dans la culture es-ES "" est un seporator décimal (pas "")

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top