ホームページ >バックエンド開発 >C++ >指定された精度に一致するように C# で Double を正確にフォーマットするにはどうすればよいですか?

指定された精度に一致するように C# で Double を正確にフォーマットするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-04 11:40:341039ブラウズ

How Can I Accurately Format Doubles in C# to Match Specified Precision?

C での出力のための Double の書式設定

C# では、Double を書式設定するためのデフォルトの動作は、指定された精度を適用する前に、値を有効な 10 進数 15 桁に丸めることです。これにより、特に精度に小さな差がある値を扱う場合、予期しない結果が生じる可能性があります。

double を正確にフォーマットし、要求された精度が確実に尊重されるようにするには、Jon Skeet が提供する DoubleConverter クラスを利用できます。このクラスの ToExactString() メソッドは、double の正確な 10 進数値を返します。指定された精度への丸めを組み込むには、メソッドを次のように変更できます:

public static string ToRoundedExactString(double value, int precision)
{
    string exactString = ToExactString(value);
    int decimalIndex = exactString.IndexOf('.');
    if (decimalIndex == -1)
    {
        return exactString;
    }

    int decimalCount = exactString.Length - (decimalIndex + 1);
    if (decimalCount > precision)
    {
        exactString = exactString.Substring(0, decimalIndex + 1 + precision);
        double roundedValue = Double.Parse(exactString);
        return roundedValue.ToString();
    }
    else
    {
        return exactString;
    }
}

この変更されたメソッドを使用すると、次のコードは形式指定子で指定された精度と一致する出力を生成します:

double i = 10 * 0.69;
Console.WriteLine(DoubleConverter.ToRoundedExactString(i, 20));
Console.WriteLine(DoubleConverter.ToRoundedExactString(6.9 - i, 20));
Console.WriteLine(DoubleConverter.ToRoundedExactString(6.9, 20));

// 6.89999999999999946709
// 0.00000000000000088818
// 6.90000000000000035527

以上が指定された精度に一致するように C# で Double を正確にフォーマットするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。