47 lines
		
	
	
		
			936 B
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			936 B
		
	
	
	
		
			Go
		
	
	
	
| package humanize
 | |
| 
 | |
| import (
 | |
| 	"strconv"
 | |
| 	"strings"
 | |
| )
 | |
| 
 | |
| func stripTrailingZeros(s string) string {
 | |
| 	offset := len(s) - 1
 | |
| 	for offset > 0 {
 | |
| 		if s[offset] == '.' {
 | |
| 			offset--
 | |
| 			break
 | |
| 		}
 | |
| 		if s[offset] != '0' {
 | |
| 			break
 | |
| 		}
 | |
| 		offset--
 | |
| 	}
 | |
| 	return s[:offset+1]
 | |
| }
 | |
| 
 | |
| func stripTrailingDigits(s string, digits int) string {
 | |
| 	if i := strings.Index(s, "."); i >= 0 {
 | |
| 		if digits <= 0 {
 | |
| 			return s[:i]
 | |
| 		}
 | |
| 		i++
 | |
| 		if i+digits >= len(s) {
 | |
| 			return s
 | |
| 		}
 | |
| 		return s[:i+digits]
 | |
| 	}
 | |
| 	return s
 | |
| }
 | |
| 
 | |
| // Ftoa converts a float to a string with no trailing zeros.
 | |
| func Ftoa(num float64) string {
 | |
| 	return stripTrailingZeros(strconv.FormatFloat(num, 'f', 6, 64))
 | |
| }
 | |
| 
 | |
| // FtoaWithDigits converts a float to a string but limits the resulting string
 | |
| // to the given number of decimal places, and no trailing zeros.
 | |
| func FtoaWithDigits(num float64, digits int) string {
 | |
| 	return stripTrailingZeros(stripTrailingDigits(strconv.FormatFloat(num, 'f', 6, 64), digits))
 | |
| }
 |