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


