使用GO,我试图找到将浮点数格式化为字符串的"最佳"方法.我已经找过例子了,但是我找不到任何能具体回答我的问题的东西.我所要做的就是使用"最佳"方法将浮点数格式化为字符串.小数位数可能会有所不同,但将是已知的(例如,2或4或零). 下面是我想要实现的一个例子.

根据下面的示例,我应该使用fmt.Sprintf()还是strconv.FormatFloat()或其他值?

那么,这两个词的正常用法是什么,它们之间的区别是什么?

我也不明白在当前为32的以下代码中使用32或64有什么意义:

strconv.FormatFloat(float64(fResult), 'f', 2, 32)

示例:

package main

import (
    "fmt"
    "strconv"
)

func main() {

    var (
        fAmt1 float32 = 999.99
        fAmt2 float32 = 222.22
    )

    var fResult float32 = float32(int32(fAmt1*100) + int32(fAmt2*100)) / 100

    var sResult1 string = fmt.Sprintf("%.2f", fResult)

    println("Sprintf value = " + sResult1)

    var sResult2 string = strconv.FormatFloat(float64(fResult), 'f', 2, 32)

    println("FormatFloat value = " + sResult2)

}

推荐答案

fmt.Sprintfstrconv.FormatFloat在幕后使用相同的字符串格式化 routine ,因此应该会产生相同的结果.

如果数字的格式精度是可变的,那么使用FormatFloat可能更容易,因为它避免了像使用Sprintf那样构造格式字符串的需要.如果它从未改变,那么你可以使用其中任何一种.

FormatFloat的最后一个参数控制值的舍入方式.从文档中可以看到:

它会舍入 假设原始数据是从浮点数中获取的 位大小位数的值(32用于浮点32,64用于浮点64)

因此,如果您使用的是示例代码中的float32个值,那么传递32是正确的.

Go相关问答推荐

如何禁用Go SRC包中的VSCode警告?

如何从google.golang.org/grpc/stats包中将golang中不同事件的输出进行组合,以获取func HandlePRC

使用Gorm创建自定义连接表

追加一个字节数组的分配比2个字节数组的分配要少得多

如何使用工作区方法扩展克隆的Golang库

CURL和Postman HTTP POST工作,但Golang请求失败,状态为400

是不是有什么原因导致`Strings.EqualFold`不先进行长度比较?

Go 中带有回调的 MiniDumpWriteDump

启动套接字服务器会干扰 gRPC/http 客户端服务器通信 Golang

如何以干净的方式在中间件中注入 repo 或服务?

如何使用 go-git 将特定分支推送到远程

仅在工作日运行 cron

如何修改go gin的默认端口?我的 8080 端口正在使用中

为什么 0 big.Int 的 .Bytes() 值是空切片?

切片到数组指针的转换

panic :拨号 tcp:在 172.22.64.1:53 上查找 bookstoreDB:没有这样的主机

为什么在 goroutine 中声明时,benbjohnson/clock 模拟计时器不执行?

如何解决在mac m1中运行gcc失败退出状态1?

Go 错误:Is() 和 As() 声称是递归的,是否有任何类型实现错误接口并支持这种递归 - 无错误?

Beego - 我需要context.Context而不是 Beego 上下文