如果我有一个双精度(234.004223)等,我想在C#中将其四舍五入为x个有效数字。
到目前为止,我只能找到四舍五入到小数点后x位的方法,但是如果数字中有0,这只会删除精度。
例如,0.086到小数点后一位变为0.1,但我希望它保持在0.08。
该框架没有内置函数来舍入(或截断,如您的示例所示)为多个有效数字。但是,您可以执行此操作的一种方法是缩放数字,以使您的第一个有效数字紧靠小数点后,四舍五入(或截断),然后缩减。以下代码可以解决问题:
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); }