一尘不染

将双数取整为x个有效数字

c#

如果我有一个双精度(234.004223)等,我想在C#中将其四舍五入为x个有效数字。

到目前为止,我只能找到四舍五入到小数点后x位的方法,但是如果数字中有0,这只会删除精度。

例如,0.086到小数点后一位变为0.1,但我希望它保持在0.08。


阅读 194

收藏
2020-05-19

共1个答案

一尘不染

该框架没有内置函数来舍入(或截断,如您的示例所示)为多个有效数字。但是,您可以执行此操作的一种方法是缩放数字,以使您的第一个有效数字紧靠小数点后,四舍五入(或截断),然后缩减。以下代码可以解决问题:

static double RoundToSignificantDigits(this double d, int digits){
    if(d == 0)
        return 0;

    double scale = Math.Pow(10, Math.Floor(Math.Log10(Math.Abs(d))) + 1);
    return scale * Math.Round(d / scale, digits);
}

如您的示例所示,如果您确实要截断,那么您需要:

static double TruncateToSignificantDigits(this double d, int digits){
    if(d == 0)
        return 0;

    double scale = Math.Pow(10, Math.Floor(Math.Log10(Math.Abs(d))) + 1 - digits);
    return scale * Math.Truncate(d / scale);
}
2020-05-19