commaf.go (762B)
1 //go:build go1.6 2 // +build go1.6 3 4 package humanize 5 6 import ( 7 "bytes" 8 "math/big" 9 "strings" 10 ) 11 12 // BigCommaf produces a string form of the given big.Float in base 10 13 // with commas after every three orders of magnitude. 14 func BigCommaf(v *big.Float) string { 15 buf := &bytes.Buffer{} 16 if v.Sign() < 0 { 17 buf.Write([]byte{'-'}) 18 v.Abs(v) 19 } 20 21 comma := []byte{','} 22 23 parts := strings.Split(v.Text('f', -1), ".") 24 pos := 0 25 if len(parts[0])%3 != 0 { 26 pos += len(parts[0]) % 3 27 buf.WriteString(parts[0][:pos]) 28 buf.Write(comma) 29 } 30 for ; pos < len(parts[0]); pos += 3 { 31 buf.WriteString(parts[0][pos : pos+3]) 32 buf.Write(comma) 33 } 34 buf.Truncate(buf.Len() - 1) 35 36 if len(parts) > 1 { 37 buf.Write([]byte{'.'}) 38 buf.WriteString(parts[1]) 39 } 40 return buf.String() 41 }