首頁 > 後端開發 > Golang > Go 中如何將 Float64 轉換為具有最大有效位數的固定寬度字串?

Go 中如何將 Float64 轉換為具有最大有效位數的固定寬度字串?

Linda Hamilton
發布: 2024-12-05 15:46:10
原創
850 人瀏覽過

How to Convert Float64 to a Fixed-Width String with Maximum Significant Digits in Go?

將Float64 轉換為具有固定寬度和最大有效數字的字串

在固定寬度表中呈現浮點數時,會出現有關保留有效數字的問題。標準 fmt.Printf 函數對此方面提供了有限的控制。

解決方案:自訂格式

為了解決這個問題,我們可以實作一個自訂格式函數,該函數可以確定最佳的有效位數適合指定的寬度。這涉及分析相關數字並根據其在科學記數法和常規形式之間進行選擇

實現:

// format12 formats x to be 12 chars long.
func format12(x float64) string {
    if x >= 1e12 {
        // For scientific notation, determine the width of the exponent.
        s := fmt.Sprintf("%.g", x)
        format := fmt.Sprintf("%%12.%dg", 12-len(s))
        return fmt.Sprintf(format, x)
    }

    // For regular form, determine the width of the fraction.
    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)
}
登入後複製

測試:

fs := []float64{0, 1234.567890123, 0.1234567890123, 123456789012.0, 1234567890123.0,
    9.405090880450127e+9, 9.405090880450127e+19, 9.405090880450127e+119}

for _, f := range fs {
    fmt.Println(format12(f))
}
登入後複製

測試:

0.0000000000
0.1234567890
1234.5678901
123456789012
1.234568e+12
9405090880.5
9.405091e+19
9.40509e+119
登入後複製
輸出:

以上是Go 中如何將 Float64 轉換為具有最大有效位數的固定寬度字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板