在 Golang 中舍入所有小数点

Rog*_*ger 3 rounding go

我试图非常规地舍入 float64 变量中的所有数字。例如:

3.4444445 --> 3.5

我想在不将其转换为字符串的情况下执行此操作!

use*_*937 8

Golang 的数学库提供了一个Round函数。但是,它将 float64 舍入为 int,这意味着小数会丢失。

解决此问题的快速解决方法是将数字乘以您要保存的小数位数,然后舍入,然后再次将其划分回来:

raw := 4.335
rounded := math.Round(raw * 10) / 10
Run Code Online (Sandbox Code Playgroud)

会给你想要的结果。

您可能想要创建一个小辅助函数来舍入保存任意数量的数字:

func roundTo(n float64, decimals uint32) float64 {
  return math.Round(n*math.Pow(10, float64(decimals))) / math.Pow(10, float64(decimals))
}
Run Code Online (Sandbox Code Playgroud)

用法:

roundTo(4.2655, 1) // 4.3
roundTo(4.3454, 3) // 4.345
Run Code Online (Sandbox Code Playgroud)