code: func (a infDecAmount) AsCanonicalBytes(out []byte) (result []byte, exponent int32) {
  	mantissa := a.Dec.UnscaledBig()
  	exponent = int32(-a.Dec.Scale())
  	amount := big.NewInt(0).Set(mantissa)
  	// move all factors of 10 into the exponent for easy reasoning
  	amount, times := removeBigIntFactors(amount, bigTen)
  	exponent += times
  
  	// make sure exponent is a multiple of 3
  	for exponent%3 != 0 {
  		amount.Mul(amount, bigTen)
  		exponent--
  	}
  
  	return append(out, amount.String()...), exponent
  }
docs: // AsCanonicalBytes accepts a buffer to write the base-10 string value of this field to, and returns
  // either that buffer or a larger buffer and the current exponent of the value. The value is adjusted
  // until the exponent is a multiple of 3 - i.e. 1.1e5 would return "110", 3.