写go时遇到一个场景要求将得到的浮点数保留两位小数,同时要去除末尾的0,试了一下 fmt.Sprintf 和 strconv.FormatFloat 都没能一步到位,最后只能先按小数位约分然后再转成字符串来解决这个问题,如果各位有更好的方式请在评论里指教一下
package main
import (
"fmt"
"math"
"strconv"
)
func main() {
var f1 float64 = 9548
var f2 float64 = 951.200
var f3 float64 = 95445.12465461315
fmt.Println("fmt.Sprintf 格式化")
fmt.Println(fmt.Sprintf("%.2f", f1))
fmt.Println(fmt.Sprintf("%.2f", f2))
fmt.Println(fmt.Sprintf("%.2f", f3))
fmt.Println("strconv.FormatFloat 格式化")
fmt.Println(strconv.FormatFloat(f1, 'f', 2, 64))
fmt.Println(strconv.FormatFloat(f1, 'f', -1, 64))
fmt.Println(strconv.FormatFloat(f2, 'f', -1, 64))
fmt.Println(strconv.FormatFloat(f3, 'f', -1, 64))
fmt.Println("round约分后 格式化")
roundedNum := RoundedNum(f1, 2)
fmt.Println(strconv.FormatFloat(roundedNum, 'f', -1, 64))
fmt.Println(strconv.FormatFloat(RoundedNum(f2, 2), 'f', -1, 64))
fmt.Println(strconv.FormatFloat(RoundedNum(f3, 2), 'f', -1, 64))
}
func RoundedNum(num float64, precision int) float64 {
roundedNum := math.Round(num*math.Pow10(precision)) / math.Pow10(precision)
return roundedNum
}