I want to display a float with the entire integer part and up to two decimals for the fractional part, without trailing zeros.
http://play.golang.org/p/mAdQl6erWX:
// Desired output:
// "1.9"
// "10.9"
// "100.9"
fmt.Println("2g:")
fmt.Println(fmt.Sprintf("%.2g", 1.900)) // outputs "1.9"
fmt.Println(fmt.Sprintf("%.2g", 10.900)) // outputs "11"
fmt.Println(fmt.Sprintf("%.2g", 100.900)) // outputs "1e+02"
fmt.Println("\n2f:")
fmt.Println(fmt.Sprintf("%.2f", 1.900)) // outputs "1.90"
fmt.Println(fmt.Sprintf("%.2f", 10.900)) // outputs "10.90"
fmt.Println(fmt.Sprintf("%.2f", 100.900)) // outputs "100.90"
Formatting with 2g
has the problem that it starts rounding when the integer increases order of magnitudes. Also, it sometimes displays numbers with an e
.
Formatting with 2f
has the problem that it will display trailing zeros. I could write a post-processing function that removes trailing zeros, but I rather do this with Sprintf
.
Can this be done in a generic way using Sprintf
?
If not, what's a good way to do this?
strconv.FormatFloat(10.900, 'f', -1, 64)
This will result in 10.9
.
The -1
as the third parameter tells the function to print the fewest digits necessary to accurately represent the float.