web-dev-qa-db-ja.com

カルチャ形式での二重解析

文字列として2倍の数字があります。数は

202.667,40

これは202667.4です

この文字列を解析して、Double.Parse( "202.667,40"、?what here)のような値を取得するにはどうすればよいですか、または値を取得する他のメソッドは素晴らしいでしょう。ありがとう

15
Ryan

まず、この番号がどの文化からのものかを知る必要があります。次に、次のようにします。

CultureInfo culture = new CultureInfo("de"); // I'm assuming german here.
double number = Double.Parse("202.667,40", culture);

現在のスレッドカルチャを使用して解析する場合(デフォルトでは現在のユーザーに設定されているもの):

double number = Double.Parse("202.667,40", CultureInfo.CurrentCulture);
31
Coincoin

文化を必要としない解決策を見つけたと思います。 NumberFormatInfoを使用すると、カルチャに関係なく、フォーマットを強制できます。

// This is invariant
NumberFormatInfo format = new NumberFormatInfo();
// Set the 'splitter' for thousands
format.NumberGroupSeparator = ".";
// Set the decimal seperator
format.NumberDecimalSeparator = ",";

それじゃあ、後でね:

System.Diagnostics.Debug.WriteLine(double.Parse("202.667,40", format)));

出力:
202667,4

もちろん、これoutput(inner toString())はCulture(!)ごとに異なる可能性があります
入力を「202,667.40」に変更すると解析エラーが発生するため、形式は予想される入力と一致する必要があることに注意してください。

これが誰かを助けることを願っています。

10
patman77

柔軟性を高めるために、NumberDecimalSeparatorを設定できます

string number = "202.667,40";
double.Parse(number.Replace(".", ""), new CultureInfo(CultureInfo.CurrentCulture.Name) {NumberFormat = new NumberFormatInfo() {NumberDecimalSeparator = ","}});
2
Yuriy Naydenov

Double.Parse(your_number、CultureInfo.CurrentCulture)を使用し、それに応じてThread.CurrentThread.CurrentCultureを使用してCurrentCultureを設定できます。

例:

Thread.CurrentThread.CurrentCulture = new CultureInfo("es-ES");

それじゃあ、後でね

Double.Parse(your_number, CultureInfo.CurrentCulture);

カルチャをCurrentThreadに明示的に割り当てると、そのスレッドにのみ適用されることに注意してください。

1
Holstebroe
var val=double.Parse( yourValue, CultureInfo.InvariantCulture);

http://www.erikschierboom.com/2014/09/01/numbers-and-culture/

1
Baouche Iqbal

すべての解析でロケールを指定する代わりに、アプリケーション全体のロケールを設定することを好みますが、文字列形式がアプリ全体で一貫していない場合、これは機能しない可能性があります。

CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("pt-PT");
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("pt-PT");

アプリケーションの開始時にこれを定義すると、すべての二重解析で小数点区切り文字としてコンマが期待されます。

1
BlunT
Double.Parse("202.667,40", new System.Globalization.CultureInfo("de-DE"));

De-DEの代わりに、文字列が含まれているカルチャを使用します。

0
Jakub Konecki