Bla*_*ise 13 go floating-point-conversion
我想显示一个包含整个整数部分的浮点数和小数部分最多两位小数,不带尾随零.
http://play.golang.org/p/mAdQl6erWX:
// Desired output:
// "1.9"
// "10.9"
// "100.9"
fmt.Println("2g:")
fmt.Println(fmt.Sprintf("%.2g", 1.900)) // outputs "1.9"
fmt.Println(fmt.Sprintf("%.2g", 10.900)) // outputs "11"
fmt.Println(fmt.Sprintf("%.2g", 100.900)) // outputs "1e+02"
fmt.Println("\n2f:")
fmt.Println(fmt.Sprintf("%.2f", 1.900)) // outputs "1.90"
fmt.Println(fmt.Sprintf("%.2f", 10.900)) // outputs "10.90"
fmt.Println(fmt.Sprintf("%.2f", 100.900)) // outputs "100.90"
Run Code Online (Sandbox Code Playgroud)
格式化具有2g
当整数增加数量级时开始舍入的问题.此外,它有时会显示数字e
.
格式化2f
有问题,它将显示尾随零.我可以写一个删除尾随零的后处理函数,但我宁愿这样做Sprintf
.
这可以通过一般方式使用Sprintf
吗?
如果没有,有什么好办法呢?
小智 25
strconv.FormatFloat(10.900, 'f', -1, 64)
这将导致10.9
.
将-1
作为第三个参数告诉函数来打印必要的位数以准确地表示浮最少.
请参见此处:https://golang.org/pkg/strconv/#FormatFloat
不确定Sprintf
但要让它起作用。修剪正确,0
然后.
。
fmt.Println(strings.TrimRight(strings.TrimRight(fmt.Sprintf("%.2f", 100.900), "0"), ".")) // 100.9
fmt.Println(strings.TrimRight(strings.TrimRight(fmt.Sprintf("%.2f", 100.0), "0"), ".")) // 100
Run Code Online (Sandbox Code Playgroud)
我使用下面的函数来实现相同的效果:
//return 45.00 with "45" or 45.50 with "45.5"
func betterFormat(num float32) string {
s := fmt.Sprintf("%.4f", num)
return strings.TrimRight(strings.TrimRight(s, "0"), ".")
}
Run Code Online (Sandbox Code Playgroud)