【问题标题】:Go fmt float64 issue转到 fmt float64 问题
【发布时间】:2016-03-09 15:39:19
【问题描述】:

在我对 go fmt 包的新手理解中遇到了一些问题

涉及到如下代码:

导入“fmt”

func main() {
    var smallFloat float64 = 0.123456789
    var bigFloat float64 = 123456789000

    fmt.Println(fmt.Sprintf("%f", smallFloat))
    fmt.Println(fmt.Sprintf("%f", bigFloat))
}

输出是:

0.123457
123456789000.000000

我不想使用科学记数法,所以认为 %f 会满足我的需要。我可以从格式化页面 (https://golang.org/pkg/fmt/) 中看到它说:

The default precision for %e and %f is 6; for %g it is the smallest number of digits necessary to identify the value uniquely.

有没有一种方法可以让我使用 fmt 包来表示 smallFloat 的完整十进制值,同时不在 bigFloat 的末尾附加 6 个零?

【问题讨论】:

    标签: go gofmt


    【解决方案1】:

    您可以使用 strconv.FormatFloat 并将 prec 设置为 -1:

    fmt.Println(strconv.FormatFloat(big, 'f', -1, 64))
    fmt.Println(strconv.FormatFloat(small, 'f', -1, 64))
    

    打印

    123456789000
    0.123456789
    

    游乐场:http://play.golang.org/p/7p8xnQ_BzE.

    【讨论】:

    • 太棒了!谢谢你的帮助。我在找错包:D
    • @Airomega 没问题。老实说,我有点惊讶fmt 似乎无法获得这个结果。
    猜你喜欢
    • 1970-01-01
    • 2021-09-14
    • 2020-05-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多