在Go中把浮点数取整提升精度的方法

1,324 阅读2分钟

要在Go中对浮点数进行四舍五入,你可以使用 math.Round()函数,该函数来自内置的 math包中的函数。然而,这个函数四舍五入到最接近的整数,所以它不能直接用于将一个浮点数四舍五入到一个特定的精度。但是你可以用它来创建你自己的函数,四舍五入到任何小数位。你所需要做的就是

  1. 将要四舍五入的数字乘以10的幂数X ,其中X 是你要达到的精度。
  2. 用函数将这个数字四舍五入到最接近的整数值。 math.Round()函数
  3. 用四舍五入的数字除以10,再除以X 的幂,其中X 是四舍五入的小数精度。

这样,通过将四舍五入的数字变成最接近的整数,然后进行除法,我们就可以得到一个四舍五入到指定小数位的数字。

例子

roundFloat() 是一个浮点舍入函数,工作方式如上所述。它的工作方式在例子中显示。

package main
import (
"fmt"
"math"
)
func roundFloat(val float64, precision uint) float64 {
ratio := math.Pow(10, float64(precision))
return math.Round(val*ratio) / ratio
}
func main() {
number := 12.3456789
fmt.Println(roundFloat(number, 2))
fmt.Println(roundFloat(number, 3))
fmt.Println(roundFloat(number, 4))
fmt.Println(roundFloat(number, 5))
number = -12.3456789
fmt.Println(roundFloat(number, 0))
fmt.Println(roundFloat(number, 1))
fmt.Println(roundFloat(number, 10))
}

输出

12.35
12.346
12.3457
12.34568
-12
-12.3
-12.3456789

将浮点数舍入到小数点后2位

将浮点数四舍五入到小数点后2位的完整例子。

package main
import (
"fmt"
"math"
)
func roundFloat(val float64, precision uint) float64 {
ratio := math.Pow(10, float64(precision))
return math.Round(val*ratio) / ratio
}
func main() {
number := 12.3456789
fmt.Println(roundFloat(number, 2))
}

输出

12.35

四舍五入到小数点后3位

四舍五入到小数点后3位的完整例子。

package main
import (
"fmt"
"math"
)
func roundFloat(val float64, precision uint) float64 {
ratio := math.Pow(10, float64(precision))
return math.Round(val*ratio) / ratio
}
func main() {
number := 12.3456789
fmt.Println(roundFloat(number, 3))
}

输出

12.346