C#で表示する小数点の桁数を指定する

C#で小数点以下の桁数を指定して文字列表示を行う方法を紹介したいと思います。

小数点以下を切り捨て & 文字表示

浮動小数点型の変数を文字列表示するときに小数点以下を表示しないようにするためには以下の記述を行います。

記述例が4つありますが結果は全て同じになります。

double d = 123.456d;

// (1) 浮動小数点型をintにキャストして切り捨てる。
string text = ((int)d).ToString();
Console.WriteLine("text = " + text);
// 出力結果
// > 123

// (2) ToStringの引数で書式指定を行う。
string text2 = d.ToString("F0"); // 小数点以下を0桁表示する指示
Console.WriteLine("text = " + text2);

// (3) string.Formatで書式の指定を行う
string text3 = string.Format("{0:F0}", d);
Console.WriteLine("text = " + text3);

// (4) (3)の C# 6 以降の書き方(ダラーを先頭において文字列内に中括弧
string text4 = $"{d:F0}";
Console.WriteLine($"text = {text4}");

書式指定に「F」、続く数字で小数点の桁数を指定します。

0を指定するとゼロ桁 = 表示されないになります。(intにキャストするほうが知識が無くてもできるので簡単かもしれません。

桁数を指定 & 文字表示

例えば小数点以下6桁だったデータを2桁で表示するするには以下のように書きます。

先ほどと同じくF + 数字で実現できます。

double d = 987.654321d;

// (1) ToStringの引数で書式指定を行う。
string text2 = d.ToString("F2"); // 小数点以下を2桁表示する指示
Console.WriteLine("text = " + text2);
// 出力結果
// > 987.65

// (2) string.Formatで書式の指定を行う
string text3 = string.Format("{0:F2}", d);
Console.WriteLine("text = " + text3);

// (3) (2)の C# 6 以降の書き方(ダラーを先頭において文字列内に中括弧
string text4 = $"{d:F2}";
Console.WriteLine("text = " + text4);

整数部をゼロ埋め & 桁数指定

例えば「123.45678」を「000123.45」のように整数部分は6桁までゼロ埋めしつつ、小数部分は2桁表示とする処理は以下の通りです。標準の初期指定では実現できないため、少し処理を記述する必要があります。

double d = 123.45678d;

// 先に整数の部分を先に書式指定する
string text = ((int)d).ToString("000000"/*6桁ゼロ埋め*/);
// 次に小数部分のみを計算して書式指定を行う
text += (d - ((int)d)).ToString("F2"/*小数点以下2桁*/).TrimStart('0'/*先頭のゼロ削除*/);
// 出力結果
// >text = 000123.46

小数部分のみを計算して残りを結合しています。「0.45」のような結果になるため、先頭のゼロを削除します。

指定桁以下の時はゼロを付けない

桁数が多かったり少なかったりする場合に指定桁未満だったら右側のゼロで埋めしない書き方です。いったん付けたゼロを除去します。

// (1) 両方を F3 とすると…
double a = 0.123456789;
double b = 0.1;

// (2) 桁が足りない時に右側にゼロがおかれる
Console.WriteLine($"{0.123456:F3}");
// > 0.123
Console.WriteLine($"{0.1:F3}");
// > 0.100 ★★この右側のゼロが必要ない

// (3) ゼロを取り除く
string b_str = b.ToString("F3").TrimEnd('0');
Console.WriteLine(b_str);
// > 0.1 ★右側のゼロが取れる

【余談】小数点文字列をdouble型に変換する

余談になりますが、小数点の文字列をdouble型に変換するには以下の処理を行います。

string text = "123.4567";

// (1) 目的の型のParseメソッドを使って変換する
double d1 = double.Parse(text);
Console.WriteLine("d1 = " + d1);
// 出力結果
// > d1 = 123.4567

// 無効な数字を指定すると例外が起きる
// System.FormatException: '入力文字列の形式が正しくありません。'
double d2 = double.Parse("ああああ");
Console.WriteLine("d2 = " + d2);

// (2) 変換に失敗する可能性がある場合、目的の型のTryParseを使って確かめてから使う
double d3;
if (double.TryParse(text, out d3))
{
    // 変換に成功した時の処理
    Console.WriteLine("d3 = " + d3);
    // 出力結果
    // > d3 = 123.4567
}
else
{
    // 変換に失敗した時の処理
}

// (3) (2)の C# 6 以降の書き方(ダラーを先頭において文字列内に中括弧
if (double.TryParse(text, out double d4)) // インラインで宣言できる

安全(変換できない場合例外でOK)な場合、Parseメソッド、外部からの入力の場合、TryParseメソッドといった感じに使い分けます。

参考

以下を参考に書きました。

MSDN:標準の数値書式指定文字列

DOBON:書式を指定して数値を文字列に変換する