github.com/bingoohuang/gg@v0.0.0-20240325092523-45da7dee9335/pkg/man/ftoa.go (about)

     1  package man
     2  
     3  import (
     4  	"strconv"
     5  	"strings"
     6  )
     7  
     8  func 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  
    23  func 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  
    37  // Ftoa converts a float to a string with no trailing zeros.
    38  func Ftoa(num float64) string {
    39  	return stripTrailingZeros(strconv.FormatFloat(num, 'f', 6, 64))
    40  }
    41  
    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.
    44  func FtoaWithDigits(num float64, digits int) string {
    45  	return stripTrailingZeros(stripTrailingDigits(strconv.FormatFloat(num, 'f', 6, 64), digits))
    46  }