Home > Backend Development > Golang > How to Format a Go float64 Value into a Fixed-Width String with Maximum Significant Digits?

How to Format a Go float64 Value into a Fixed-Width String with Maximum Significant Digits?

Patricia Arquette
Release: 2024-12-03 18:31:10
Original
746 people have browsed it

How to Format a Go float64 Value into a Fixed-Width String with Maximum Significant Digits?

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)
Copy after login

}

This solution employs a two-step process:

  1. Determining the Precision:

    • For values greater than or equal to 1e12, a scientific notation with an appropriate precision is used.
    • For smaller values, a regular form with a sufficient precision is calculated based on the length of the integer part.
  2. Creating the Formatting String:

    • Based on the calculated precision, a custom formatting string is constructed to ensure the desired fixed width.

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}
Copy after login

for _, f := range fs {

fmt.Println(format12(f))
Copy after login

}

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!

source:php.cn
Previous article:How to Construct a time.Time Instance with a Specific Timezone Offset in Go? Next article:What's the Difference Between `go build` and `go install`, and Where Do They Install Executables?
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Latest Issues
Related Topics
More>
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template