Go 实现 NumberFormat 函数
【转】http://www.syyong.com/Go/Go-implements-the-NumberFormat-algorithm.html
NumberFormat — 以千位分隔符方式格式化一个数字。
NumberFormat
// number_format() // decimals: Sets the number of decimal points. // decPoint: Sets the separator for the decimal point. // thousandsSep: Sets the thousands separator. func NumberFormat(number float64, decimals uint, decPoint, thousandsSep string) string { neg := false if number < 0 { number = -number neg = true } dec := int(decimals) // Will round off str := fmt.Sprintf("%."+strconv.Itoa(dec)+"F", number) prefix, suffix := "", "" if dec > 0 { prefix = str[0:len(str)-(dec+1)] suffix = str[len(str)-dec:] } else { prefix = str } sep := []byte(thousandsSep) n, l1, l2 := 0, len(prefix), len(sep) // thousands sep num c := (l1 - 1) / 3 tmp := make([]byte, l2*c+l1) pos := len(tmp) - 1 for i := l1 - 1; i >= 0; i, n, pos = i-1, n+1, pos-1 { if l2 > 0 && n > 0 && n%3 == 0 { for j, _ := range sep { tmp[pos] = sep[l2-j-1] pos-- } } tmp[pos] = prefix[i] } s := string(tmp) if dec > 0 { s += decPoint + suffix } if neg { s = "-" + s } return s }