在C# 中,格式化雙精度數的預設行為是在應用指定精度之前將值四捨五入到15 位有效十進制數字。這可能會導致意外的結果,特別是在處理精度差異很小的值時。
要精確格式化雙精確度數並確保遵循所要求的精確度,可以使用 Jon Skeet 提供的 DoubleConverter 類別。此類別中的 ToExactString() 方法傳回雙精度型的精確十進位值。要合併到指定精度,可以如下修改該方法:
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# 中準確格式化雙精度數以符合指定的精度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!