func f64Dig()

in conv/float.go [53:113]


func f64Dig(n float64, prec int, buf *[39]byte) []byte {
	neg := n < 0
	if neg {
		n = -n
	}
	u := int64(n)
	l := n - float64(u)
	var ul uint64
	if l+math.Pow10(-prec)/2 >= 1 {
		u++
		ul = 0
		l = 0
	} else {
		ul = uint64(math.Round((n - float64(u)) * math.Pow10(prec)))
	}

	pos := 20
	for u >= 100 {
		pos -= 2

		is := u % 100
		u /= 100

		buf[pos+1], buf[pos] = digits2[is][1], digits2[is][0]
	}

	if u < 10 {
		pos--
		buf[pos] = digits[u]
	} else {
		pos -= 2
		buf[pos+1], buf[pos] = digits2[u][1], digits2[u][0]
	}

	if neg {
		pos--
		buf[pos] = '-'
	}

	if prec == 0 {
		return buf[pos:20]
	}

	ed := 20 + prec
	buf[20] = '.'

	for ed > 20 {
		is := ul % 100
		ul /= 100

		if ed == 21 {
			buf[ed] = digits[is]
			break
		} else {
			buf[ed], buf[ed-1] = digits2[is][1], digits2[is][0]
			ed -= 2
		}
	}

	return buf[pos : 21+prec]
}