四舍五入值Go中小数点后2位的减半
使用Go中的四舍五入值Go中小数点后2位的减半,go,rounding,Go,Rounding,使用Go中的math.Round()in Go: fmt.Println(math.Round(1.015*100) / 100) 我得到:1.02。没错 但当我用一个函数来做同样的工作时: func RoundHalfUp(x float64) float64 { return math.Round(x*100) / 100 } 我得到了1.01 roundhalup功能有什么问题 数值常量表示任意精度和do的精确值 不要溢出 实现限制:尽管数值常量具有任意 在语言中,编译
math.Round()
in Go:
fmt.Println(math.Round(1.015*100) / 100)
我得到:1.02
。没错
但当我用一个函数来做同样的工作时:
func RoundHalfUp(x float64) float64 {
return math.Round(x*100) / 100
}
我得到了1.01
roundhalup
功能有什么问题
数值常量表示任意精度和do的精确值
不要溢出
实现限制:尽管数值常量具有任意
在语言中,编译器可以使用
精度有限的内部表示。也就是说,每个
实施必须:
- 表示浮点常量,包括复数常量的部分,尾数至少为256位,带符号
至少16位的二进制指数 - 如果由于精度限制而无法表示浮点或复常量,则四舍五入到最接近的可表示常量
实现
roundhalup
函数,就像Go编译器对math.Round(1.015*100)/100所做的那样1.015*100
是一个非类型化的浮点常量表达式。使用至少256位精度的math/big
软件包。Gofloat64
(IEEE-754 64位浮点)具有53位精度
例如,使用256位精度(常量表达式)
游乐场:
输出:
1.02
1.01
如果我们只使用53位精度(float64
):
游乐场:
输出:
1.02
1.01
看见表达式1.015*100
为a,并精确计算。表达式x*100
使用float64s进行计算。