blob: 1c62b640d47cbdfa15f5a82b3448493d3f9421ca [file] [log] [blame]
khenaidooab1f7bd2019-11-14 14:00:27 -05001package humanize
2
khenaidood948f772021-08-11 17:49:24 -04003import (
4 "strconv"
5 "strings"
6)
khenaidooab1f7bd2019-11-14 14:00:27 -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
khenaidood948f772021-08-11 17:49:24 -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
khenaidooab1f7bd2019-11-14 14:00:27 -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}
khenaidood948f772021-08-11 17:49:24 -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}