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 サイトの他の関連記事を参照してください。