C#のラウンドトリップ(R)書式指定子とは?使い方を解説
ラウンドトリップ(R)書式指定子とは
C#のラウンドトリップ("R")書式指定子は、Single、Double、BigInteger の各型でサポートされている標準の数値書式です。
この書式指定子を使用すると、数値を文字列に変換した後、その文字列を再度解析(パース)した際に、必ず元と同じ数値に復元されることが保証されます。つまり、変換による精度の損失がないことが保証されるため、シリアライズやログ出力など、値を厳密に保持したい場面で役立ちます。
基本的な使い方
まず、double型の変数を用意します。
double doubleVal = 0.91234582637;
次に、ToString()メソッドを呼び出し、第1引数にラウンドトリップ書式指定子「R」を渡します。カルチャによる差異を避けるため、CultureInfo.InvariantCulture を指定するのが一般的です。
doubleVal.ToString("R", CultureInfo.InvariantCulture);サンプルコード
実際の動作を確認するため、完全なコード例を見てみましょう。
using System;
using System.Numerics;
using System.Globalization;
class Demo {
static void Main() {
double doubleVal = 0.91234582637;
string str = doubleVal.ToString("R", CultureInfo.InvariantCulture);
double resRound = double.Parse(str, CultureInfo.InvariantCulture);
// 'R'でDoubleをラウンドトリップ
Console.WriteLine(doubleVal.Equals(resRound));
}
}実行結果
True
出力が「True」であることから、文字列化してから再パースした値が、元のdouble値と完全に一致していることが確認できます。
補足:R指定子利用時の注意点
.NET Core 3.0 以降では、浮動小数点数の書式設定が IEEE 754 準拠に改善され、最短かつ丸め可能な表現が出力されるようになりました。そのため、Double型のラウンドトリップには「G17」、Single型には「G9」を使うことも選択肢となります。特に古いバージョンとの互換性が必要な場合や、パフォーマンスが重要なケースでは、これらの書式指定子の利用も検討するとよいでしょう。
-
C#でTimeSpanをhh:mm:ss形式にフォーマットする方法
C#では、TimeSpan構造体の値を「hh:mm:ss」形式で簡単にフォーマットして表示することができます。カスタム書式指定子を使えば、時間・分・秒を自由な形式で出力可能です。 TimeSpanの設定 まず、フォーマット対象となるTimeSpanオブジェクトを作成します。 TimeSpan ts = new TimeSpan(9, 15, 30); この例では、9時間15分30秒を表すTimeSpanを作成しています。 TimeSpanをフォーマットするには TimeSpanを「hh:mm:ss」形式でフォーマットするには、次のような書式指定文字列を使用します。 {0:hh\:mm\:ss
-
C#でdouble型の数値を文字列として書式設定する方法(String.Formatの使い方)
C#では、静的メソッド String.Format を使うことで、double型の数値を任意の形式で文字列に書式設定できます。小数点以下の桁数指定や、3桁ごとのカンマ区切りなど、実務でよく使われる書式を簡単に実現できます。 1. 小数点以下3桁で表示する 書式指定子 {0:0.000} を使用すると、数値を必ず小数点以下3桁で表示できます。元の数値の桁数が足りない場合は0で埋められ、余分な桁は四捨五入されます。 String.Format({0:0.000}, 987.383); // 結果: 987.383 String.Format({0:0.000}, 987.38); //