数字を2倍の数千でグループ化したいのですが、出力もしますが、実際には小数点以下の桁数が数値に含まれています。フォーマット文字列がわかりません。
1000 => 1,000
100000 => 100,000
123.456 => 123.456
100000.21 => 100,000.21
100200.123456 => 100,200.123456
免責事項(あなたが思うほど簡単ではありません):
数字を2倍の数千でグループ化したいのですが、出力もしますが、実際には小数点以下の桁数が数値に含まれています。フォーマット文字列がわかりません。
1000 => 1,000
100000 => 100,000
123.456 => 123.456
100000.21 => 100,000.21
100200.123456 => 100,200.123456
免責事項(あなたが思うほど簡単ではありません):
これはあなたが望むことを正確に行うように見えます:
public void Code(params string[] args)
{
Print(1000);
Print(100000);
Print(123.456);
Print(100000.21 );
Print(100200.123456);
}
void Print(double n)
{
Console.WriteLine("{0:###,###.#######}", n);
}
1,000
100,000
123.456
100,000.21
100,200.123456
古いスレッドですが、私にとって完全に満足できる答えはありません。それらのほとんどは、賛成票が最も多いものを含め、ゼロを空の文字列に変換します。
"#,##0.#################"
より良い解決策は、少なくともゼロを表示する だと思います。それでも醜いですけどね。もっと良い方法があるはずです。
double[] vals = new double[] { 0.0, 0.1234, -0.1234, 1.0,
123456789.123456, 123456789.0,
0.123456789123456 };
foreach (double val in vals)
{
Console.WriteLine(val + ": " + val.ToString("#,##0.#################"));
}
単に「#、#」を使用してみてください。これにより、数千などのカンマが追加されますが、小数が保持されるかどうかはわかりません。それ以外の場合は、「#、###。###########」 ######### "、または小数点以下の任意の数の「#」記号。
カスタムフォーマット文字列を作成できます。ToString( "###、###。######") カスタム数値フォーマット文字列
これを試してください:
VB:
Dim vals() As Double = {1000, 100000, 123.456, 100000.21, 100200.123456}
For Each val As Double in vals
Console.WriteLine(val.ToString("###,###.#########"))
Next val
C#:
double[] vals = new double[] {1000, 100000, 123.456, 100000.21, 100200.123456};
foreach (double val in vals)
{
Console.WriteLine(val.ToString("###,###.#########"));
}
問題は、任意の数の小数を処理する形式がないことです。ただし、保存できる精度は非常に限られているため、それを使用して、重要でない0を切り落とすことができると仮定して、必要に応じて#文字を追加してカバーすることができます。
そして、あなたが投稿したMSDNリンクは、これを行う方法を読むために行く正確な場所です。
これは少し遅いかもしれませんが、それはあなたが望むことをします。
public static string FormatNumber(double num)
{
string s = num.ToString();
string result = "";
if(s.IndexOf('.') != -1)
{
result = s.Substring(s.IndexOf('.'));
s = s.Substring(0, s.IndexOf('.'));
}
while (s.Length > 3)
{
result = "," + s.Substring(s.Length - 3);
s = s.Substring(0, s.Length - 3);
}
if (s.Length == 0)
return result.Substring(1);
return s + result;
}