ftoa.go

 1package humanize
 2
 3import (
 4	"strconv"
 5	"strings"
 6)
 7
 8func stripTrailingZeros(s string) string {
 9	if !strings.ContainsRune(s, '.') {
10		return s
11	}
12	offset := len(s) - 1
13	for offset > 0 {
14		if s[offset] == '.' {
15			offset--
16			break
17		}
18		if s[offset] != '0' {
19			break
20		}
21		offset--
22	}
23	return s[:offset+1]
24}
25
26func stripTrailingDigits(s string, digits int) string {
27	if i := strings.Index(s, "."); i >= 0 {
28		if digits <= 0 {
29			return s[:i]
30		}
31		i++
32		if i+digits >= len(s) {
33			return s
34		}
35		return s[:i+digits]
36	}
37	return s
38}
39
40// Ftoa converts a float to a string with no trailing zeros.
41func Ftoa(num float64) string {
42	return stripTrailingZeros(strconv.FormatFloat(num, 'f', 6, 64))
43}
44
45// FtoaWithDigits converts a float to a string but limits the resulting string
46// to the given number of decimal places, and no trailing zeros.
47func FtoaWithDigits(num float64, digits int) string {
48	return stripTrailingZeros(stripTrailingDigits(strconv.FormatFloat(num, 'f', 6, 64), digits))
49}