Decimalの仕様
範囲
79,228,162,514,264,337,593,543,950,335
から
-79,228,162,514,264,337,593,543,950,335
まで。
最大桁数
28から29桁の数字
小数について
.NETのDecimalは、整数部1桁の表示は必要と思われます。そのため、小数は、小数第28位まで表示できるようです。
カスタム数値形式文字列
- 整数部は3桁ごとに「,」で区切る。
- 小数部は省略せず数字がある桁は全て表示する。ただし、小数部の数字は0で終わらない。
このように表示できる、カスタム数値形式文字列は、次です。
{0:#,0.############################}
整数部は、#,0で、3桁ごとに「,」で区切り表示します。
小数部は、「.」以下に「#」が28個あります。
これにより、次のように、整数部最小1桁・小数部最大28桁、あわせて最大29桁の数字を表示できます。
0.1234567890123456789012345678
コード
//整数部1桁、小数第4位までの数値
Console.WriteLine(0.1000); //doubleの場合
Console.WriteLine(0.1000m);
Console.WriteLine(0.1000m.ToString("#,0.############################"));
Console.WriteLine(0.1000m.ToString("#,#.############################"));
//0.1
//0.1000
//0.1
//.1
//整数部1桁、小数第28位までの数値
Console.WriteLine(0.1234567890123456789012345678m);
Console.WriteLine(0.1234567890123456789012345678m.ToString("#,0.############################"));
Console.WriteLine(0.1234567890123456789012345678m.ToString("#,#.############################"));
//0.1234567890123456789012345678
//0.1234567890123456789012345678
//.1234567890123456789012345678
//整数部1桁、小数第29位までの数値
Console.WriteLine(0.12345678901234567890123456789m);
Console.WriteLine(0.12345678901234567890123456789m.ToString("#,0.############################"));
Console.WriteLine(0.12345678901234567890123456789m.ToString("#,#.############################"));
//小数第29位の「9」が四捨五入されて、小数第28位の「8」が「9」になります。
//0.1234567890123456789012345679
//0.1234567890123456789012345679
//.1234567890123456789012345679
Console.WriteLine(0.1234m);
Console.WriteLine(0.1234m.ToString("#,0.############################"));
Console.WriteLine(0.1234m.ToString("#,#.############################"));
//0.1234
//0.1234
//.1234
Console.WriteLine(1234.5678m);
Console.WriteLine(1234.5678m.ToString("#,0.############################"));
Console.WriteLine(1234.5678m.ToString("#,#.############################"));
//1234.5678
//1,234.5678
//1,234.5678
//整数部9桁、小数第21位までの数値
Console.WriteLine(123456789.012345678901234567899m);
Console.WriteLine(123456789.012345678901234567899m.ToString("#,0.############################"));
Console.WriteLine(123456789.012345678901234567899m.ToString("#,#.############################"));
//小数第21位の「9」が四捨五入されて、小数第20位の「9」が「10」となり一桁繰り上がり、小数第19位の「8」が「9」になります。
//123456789.01234567890123456790 //小数部が0で終わる
//123,456,789.0123456789012345679 //小数部は0で終わらない
//123,456,789.0123456789012345679
//整数部28桁、小数第4位までの数値
Console.WriteLine(1234567890123456790123456790.1234m);
Console.WriteLine(1234567890123456790123456790.1234m.ToString("#,0.############################"));
Console.WriteLine(1234567890123456790123456790.1234m.ToString("#,#.############################"));
//小数第1位まで表示されます。
//1234567890123456790123456790.1
//1,234,567,890,123,456,790,123,456,790.1
//1,234,567,890,123,456,790,123,456,790.1