首頁 > 後端開發 > C++ > 如何在 C# 中準確格式化雙精度數以符合指定的精度?

如何在 C# 中準確格式化雙精度數以符合指定的精度?

Barbara Streisand
發布: 2025-01-04 11:40:34
原創
1006 人瀏覽過

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

在C 中格式化雙精度數以進行輸出

在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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板