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