Printing Float64 Numbers with Fixed Width and Significant Digits
Imagine you need to print float64 numbers in a table with a fixed width of 12 characters and the maximum possible number of significant digits. Consider the following examples:
fmt.Printf("%12.6g\n", 9.405090880450127e+119) //"9.40509e+119" fmt.Printf("%12.6g\n", 0.1234567890123) //" 0.123457" fmt.Printf("%12.6g\n", 123456789012.0) //" 1.23457e+11"
As you can see, the default fmt.Printf function with the .6g format specifier may either truncate significant digits or use scientific notation, resulting in loss of precision. Is there a way to achieve our desired formatting using standard library functions?
Custom Formatting to the Rescue
There is no straightforward standard library function that exactly meets our requirements. However, we can develop a custom formatting function that takes the desired width and maximum significant digits into account. Here's how we approach this:
Here's an example implementation in Go:
import ( "fmt" ) func format12(x float64) string { if x >= 1e12 { exp := fmt.Sprintf("%.g", x) return fmt.Sprintf("%%12.%dg", 12-len(exp)) } s := fmt.Sprintf("%.0f", x) if len(s) == 12 { return s } return fmt.Sprintf("%%%d.%df", len(s), 12-len(s)-1) }
Testing this function with various float64 values yields the following output:
0.0000000000 0.1234567890 1234.5678901 123456789012 1.234568e+12 9405090880.5 9.405091e+19 9.40509e+119
This demonstrates how to print float64 numbers in a fixed width with the maximum possible number of significant digits using custom formatting.
The above is the detailed content of How to Print Float64 Numbers in Go with Fixed Width and Maximum Significant Digits?. For more information, please follow other related articles on the PHP Chinese website!