createAndStripZerosForScale static method

BigDecimal createAndStripZerosForScale(
  1. BigInt intVal,
  2. int scale,
  3. int preferredScale
)

Implementation

static BigDecimal createAndStripZerosForScale(
  BigInt intVal,
  int scale,
  int preferredScale,
) {
  final ten = BigInt.from(10);
  var intValMut = intVal;
  var scaleMut = scale;

  while (intValMut.compareTo(ten) >= 0 && scaleMut > preferredScale) {
    if (intValMut.isOdd) {
      break;
    }
    final remainder = intValMut.remainder(ten);

    if (remainder.sign != 0) {
      break;
    }
    intValMut = intValMut ~/ ten;
    scaleMut = sumScale(scaleMut, -1);
  }

  return BigDecimal._(intVal: intValMut, scale: scaleMut);
}