stripTrailingZeros method

Decimal stripTrailingZeros()

Strip trailing zeros from decimal representation

Examples:

  • Decimal.parse("2.5000").stripTrailingZeros() -> "2.5"
  • Decimal.parse("0.2000").stripTrailingZeros() -> "0.2"
  • Decimal.parse("3.000").stripTrailingZeros() -> "3"

Implementation

Decimal stripTrailingZeros() {
  // Special case for zero
  if (_value == BigInt.zero) {
    return Decimal.zero;
  }

  var valueStr = _value.abs().toString();
  var trailingZeros = 0;
  for (var i = valueStr.length - 1; i >= 0 && valueStr[i] == '0'; i--) {
    trailingZeros++;
  }
  // Only strip trailing zeros from the fractional part (up to _scale)
  trailingZeros = math.min(trailingZeros, _scale);

  if (trailingZeros > 0) {
    final newScale = _scale - trailingZeros;
    final factor = pow10(trailingZeros);
    final newValue = _value ~/ factor;
    return Decimal(newValue, newScale);
  }
  return this;
}