Double.Parse - 国際化の問題
-
05-09-2019 - |
質問
これは狂気私を運転しています。私はASP.NET 2.0 Webフォームページで次の文字列を持っている。
string s = "0.009";
十分なシンプル。 「ES-ES」である - - 私の文化はスペイン語であれば今、私は二重に文字列を変換しようと、私は次の操作を行います:
double d = Double.Parse(s, new CultureInfo("es-ES"));
0009私が期待するものです。代わりに、私は.NETが、それは米国がエンカンマで桁区切り、と考えていることを理解9.得るが、それは私がparseメソッドに渡している文化情報を取り、に正しいフォーマットを適用するべきではありません変換?
私が行う場合は、
double d = 0.009D;
string formatted = d.ToString(new CultureInfo("es-ES"));
フォーマットされた今0009です。誰?
解決
これは にあなたが与えた文化を取り、正しい書式を適用しています。あなたは「0.009」の文字列を提供し、あなたはそれが適切にスペイン語としてそれを解釈することを不平を言うそして...それはスペイン語だったということを言いました!あなたはそれがない知っているとき、文字列がスペイン語であるということを教えないでください。
あなたは、このケースではen-USでまたはEN-GB以上にInvariantCultureされるであろう、文字列の文化が解析されているParseメソッドを渡す必要があります。
他のヒント
ジェスの書き込みが私のためにどのような作品。ただ、「不変の文化」を取得する方法を試してみる必要があるだろう誰のために:それはこのように見える。
double d = Double.Parse(myString, CultureInfo.InvariantCulture);
(最初のStackOverflowのポストので、いや、むしろ限界;)
あなたは後方にそれを持っています。
あなたはdouble d = Double.Parse(s, new CultureInfo("es-ES"));
を言うとき、あなたは文字列がES-ES培養で書かれていると仮定して、二重にあなたの文字列を解析するために、.NETを求めています。
スペイン文化では、 ""数千の区切りなので、 "0.009" が9である。
あなたはtoString()を使用して変換するとそれは使用していますので、最後に、小数点区切り文字として「」、スペイン文化を使用して文字列に0.009を変換言って、あなたは 『0009』を取得します。動作は正しいです。
私の推測では、あなたが不変の文化とDouble.Parse使用したいということです、そしてスペイン文化とのToStringメソッドなので、0.009は0009になります。
私は本当にとして、9を言うだけの長い道のりであるあなたは、ES-ES文化0.009で、それを周りに間違った方法を解釈していると思います「」あなたがのように文字列の「0.009」を尋ねるので、もしES-ESの文化をあなたが実際にdeouble 9.0を取得する必要があります。を解析され、小数点区切り文字ではありません。あなたは「0009」を解析するために、それを頼む場合は、0.009のダブルを取得する必要があります。
同様に、あなたはの形式のにそれを求めるならダブル0.009あなたはES-ESの文字列 "0009" を取得する必要があります。
あなたは構文解析と書式設定を間違えています。あなたは。ベースの文化の中でフォーマットされた文字列を取ると、ベースのカルチャを使用してそれを解析するので、あなたは、9の代わりに0.009を最初に取得します。あなたはそれを使用して作成されたものは何でも文化使ってそれを解析して、あなたが表示のために好きな文化使用してフォーマットする必要があります。
double d = Double.Parse("0,009",
NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands,
CultureInfo.CreateSpecificCulture("es-ES"));
ES-ES培養物中 "" 小数seporatorある(ない "")