四舍五入是一个非常常见的功能,在流行语言标准库中往往存在 Round
的功能,它最少支持常用的 Round half up
算法。
而在 Go 语言中这似乎成为了难题,在 stackoverflow 上搜索 [go] Round
会存在大量相关提问,Go 1.10 开始才出现 math.Round
的身影,本以为 Round
的疑问就此结束,但是一看函数注释 Round returns the nearest integer, rounding half away from zero
,这是并不常用的 Round half away from zero
实现呀,说白了就是我们理解的 Round
阉割版,精度为 0 的 Round half up
实现,Round half away from zero
的存在是为了提供一种高效的通过二进制方法得结果,可以作为 Round
精度为 0 时的高效实现分支。
带着对 Round
的‘敬畏’,我在 stackoverflow 翻阅大量关于 Round
问题,开启寻求最佳的答案,本文整理我认为有用的实现,简单分析它们的优缺点,对于不想逐步了解,想直接看结果的小伙伴,可以直接看文末的最佳实现,或者跳转 exmath.Round 直接看源码和使用吧!