type decimal … // at returns the i'th mantissa digit, starting with the most significant digit at 0. func (d *decimal) at(i int) byte { … } const maxShift … // Init initializes x to the decimal representation of m << shift (for // shift >= 0), or m >> -shift (for shift < 0). func (x *decimal) init(m nat, shift int) { … } // shr implements x >> s, for s <= maxShift. func shr(x *decimal, s uint) { … } func (x *decimal) String() string { … } // appendZeros appends n 0 digits to buf and returns buf. func appendZeros(buf []byte, n int) []byte { … } // shouldRoundUp reports if x should be rounded up // if shortened to n digits. n must be a valid index // for x.mant. func shouldRoundUp(x *decimal, n int) bool { … } // round sets x to (at most) n mantissa digits by rounding it // to the nearest even value with n (or fever) mantissa digits. // If n < 0, x remains unchanged. func (x *decimal) round(n int) { … } func (x *decimal) roundUp(n int) { … } func (x *decimal) roundDown(n int) { … } // trim cuts off any trailing zeros from x's mantissa; // they are meaningless for the value of x. func trim(x *decimal) { … }