blob: bce923f371aaf9261f89a8e5bf2b3911d7f2dc6a [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 {
Abhay Kumar40252eb2025-10-13 13:25:53 +00009 if !strings.ContainsRune(s, '.') {
10 return s
11 }
khenaidoo59ce9dd2019-11-11 13:05:32 -050012 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
khenaidoo26721882021-08-11 17:42:52 -040026func 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
khenaidoo59ce9dd2019-11-11 13:05:32 -050040// 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}
khenaidoo26721882021-08-11 17:42:52 -040044
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}