6

このような数値12,345,678.09に変換し12.345.678,09 たいのですが、文字列を分割し、文字列.内のカンマをピリオドに変更してからカンマで結合することを考えています。

string value = "12,345,678.09";
string[] parts = value.Split(new char[]{'.'});
string wholeNumber = parts[0].Replace(",", ".");
string result = String.Format("{0},{1}", wholeNumber, parts[1]);

この方法は非常に不器用だと思います。より良い方法はありますか?

4

5 に答える 5

9

これを行う正しい方法 (文字列マッシングではなく正しい) は、CultureInfoフォーマットするカルチャに を使用することです。あなたはイタリアの文化を求めているようですit-IT:

var num = 123456789.01;
var ci = new CultureInfo("it-IT");
Console.WriteLine(num.ToString("#,##0.00",ci)); //output 123.456.789,01

実際の例: http://rextester.com/ARWF39685

フォーマット文字列では、,「数値グループ区切り記号」を意味し、.「小数点区切り記号」を示すために使用しますが、カルチャ情報はそれをカルチャの正しい区切り記号に置き換えます-イタリアのカルチャに関しては、それらは正確に逆になります (.はグループ区切り記号です)および,は小数点記号です)。

于 2012-04-23T13:35:01.353 に答える
9

文字列のどこにも表示されない記号がある場合、たとえば 、'$'次のようにすることができます。

parts[0].Replace(",", "$").Replace(".", ",").Replace("$", ".");

確かに、これは CPU サイクルの点では最適ではありませんが、1 行に留まるという点では効果的です。

于 2012-04-23T13:18:53.490 に答える
4
string value = "12,345,678.90";
value = string.Join(".", value.Split(',').Select(s => s.Replace(".", ",").ToArray());
于 2012-04-23T13:24:11.013 に答える
1

あなたが持っている

string value = "12,345,678.09";
value = value.replace(",", "_").replace(".", ",").replace("_", ".")
于 2012-04-23T13:34:01.437 に答える
0

あなたは行くことができます:

string newString = Convert.ToDouble(oldString).ToString("#,0.##", new CultureInfo("de-DE"));

詳細はこちら
あなたが望むように、それはすべて1行であり、推奨される方法です.
また、他のカルチャ (またはCultureInfo.CurrentCulture) を使用して、ユーザーが数字を見るのに慣れている方法で数字を表示することもできます。彼がイタリア語のウィンドウを使用している場合、CurrentCulture == "it-IT"それに応じて数値形式が表示されます。CurrentCultureおそらくあなたが探しているものだと思います。間違っている場合は修正してください。
編集: Jamiecs によると、コメント形式はこの方法では文字列に対して機能しないため、変換を追加しました。ただし、注意してください: 変換が機能しない場合は、例外がスローされる可能性があります。そのため、複数行で実行し、Double.TryParse() などを使用することをお勧めします。

于 2012-04-23T13:41:22.923 に答える