asExponential method

String asExponential(
  1. int precision,
  2. {bool remove_trailing_zeros = true}
)

Implementation

String asExponential(int precision, {bool remove_trailing_zeros = true}) {
  var offset = _decimal - _exponent;

  var extra_zeroes = precision - (_digits.length - offset) + 1;

  if (extra_zeroes > 0) {
    _digits.addAll(
        Formatter.get_padding(extra_zeroes, '0').split('').map(int.parse));
  }

  _round(offset + precision, offset);

  var ret = _digits[offset - 1].toString();
  //print ("(${offset}, ${precision})${_digits}");
  var trailing_digits = _digits.sublist(offset, offset + precision);
  // print ("trailing_digits=${trailing_digits}");
  var _exp_str = _exponent.abs().toString();

  if (_exponent < 10 && _exponent > -10) {
    _exp_str = '0${_exp_str}';
  }

  _exp_str = (_exponent < 0) ? 'e-${_exp_str}' : 'e+${_exp_str}';

  if (remove_trailing_zeros) {
    trailing_digits = _remove_trailing_zeros(trailing_digits);
  }

  if (trailing_digits.isNotEmpty) {
    ret += '.';
  }

  ret = trailing_digits.fold(ret, (i, e) => '${i}${e}');
  ret = '${ret}${_exp_str}';

  return ret;
}