C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のラウンドトリップ(R)書式指定子とは?使い方を解説

ラウンドトリップ(R)書式指定子とは

C#のラウンドトリップ("R")書式指定子は、SingleDoubleBigInteger の各型でサポートされている標準の数値書式です。

この書式指定子を使用すると、数値を文字列に変換した後、その文字列を再度解析(パース)した際に、必ず元と同じ数値に復元されることが保証されます。つまり、変換による精度の損失がないことが保証されるため、シリアライズやログ出力など、値を厳密に保持したい場面で役立ちます。

基本的な使い方

まず、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」を使うことも選択肢となります。特に古いバージョンとの互換性が必要な場合や、パフォーマンスが重要なケースでは、これらの書式指定子の利用も検討するとよいでしょう。

  1. 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

  2. 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); //