roundToSignificantDigits method

  1. @useResult
double roundToSignificantDigits(
  1. int significantDigits
)

Rounds to significantDigits significant digits.

significantDigits must be positive.

Implementation

@useResult
double roundToSignificantDigits(int significantDigits) {
  if (significantDigits < 1) {
    throw ArgumentError(_kErrSignificantDigitsPositive, _kParamSignificantDigits);
  }
  final double x = toDouble();
  if (x == 0) return 0;
  final double magnitude = x.abs();
  final int e = magnitude >= 1
      ? math.log(magnitude) ~/ math.ln10
      : -(math.log(magnitude) / math.ln10).ceil();
  final double scale = math.pow(10.0, significantDigits - 1 - e).toDouble();
  return (x * scale).round() / scale;
}