以下代码应该适用于数量相对较少且输入精度较低的许多简单用例。但是,它可能不适用于某些用例,因为数字超出了 float64 数字的范围,以及 IEEE-754 舍入错误(其他语言也有这个问题)。
如果您关心使用更大的数字或需要更高的精度,以下代码可能无法满足您的需求,您应该使用帮助库(例如https://github.com/shopspring/decimal)。
我从别处拿起了一个单线轮函数,并且还制作了依赖于 round() 的 toFixed():
func round(num float64) int {
return int(num + math.Copysign(0.5, num))
}
func toFixed(num float64, precision int) float64 {
output := math.Pow(10, float64(precision))
return float64(round(num * output)) / output
}
用法:
fmt.Println(toFixed(1.2345678, 0)) // 1
fmt.Println(toFixed(1.2345678, 1)) // 1.2
fmt.Println(toFixed(1.2345678, 2)) // 1.23
fmt.Println(toFixed(1.2345678, 3)) // 1.235 (rounded up)