How to Convert Float64 to a Fixed-Width String with Maximum Significant Digits in Go
In Go, when printing float64 values within a fixed width table, it's often desirable to preserve as many significant digits as possible. However, the default formatting can result in lost precision due to the automatic switch to scientific notation for large numbers.
The Need for a Custom Formatting Solution
For cases where both scientific notation and regular form are unacceptable, a customized formatting approach is required. The primary focus should be on calculating the optimal precision that fits within the specified width while retaining maximum significant digits.
Proposed Solution
The following implementation offers a straightforward solution:
<br>// format12 formats x to be 12 chars long.<br>func format12(x float64) string {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">if x >= 1e12 { s := fmt.Sprintf("%.g", x) format := fmt.Sprintf("%%12.%dg", 12-len(s)) return fmt.Sprintf(format, x) } s := fmt.Sprintf("%.0f", x) if len(s) == 12 { return s } format := fmt.Sprintf("%%%d.%df", len(s), 12-len(s)-1) return fmt.Sprintf(format, x)
}
This solution employs a two-step process:
Determining the Precision:
Creating the Formatting String:
Sample Usage and Output
To demonstrate its functionality, let's consider a few sample values:
<br>fs := []float64{0, 1234.567890123, 0.1234567890123, 123456789012.0, 1234567890123.0,</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">9.405090880450127e+9, 9.405090880450127e+19, 9.405090880450127e+119}
for _, f := range fs {
fmt.Println(format12(f))
}
Output:
<br>0.0000000000<br>0.1234567890<br>1234.5678901<br>123456789012<br>1.234568e 12<br>9405090880.5<br>9.405091e 19<br>9.40509e 119<br>
This solution provides the desired fixed-width formatting while preserving maximum significant digits, allowing for clear and concise display of float64 values in various scenarios.
The above is the detailed content of How to Format a Go float64 Value into a Fixed-Width String with Maximum Significant Digits?. For more information, please follow other related articles on the PHP Chinese website!