Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
四舍五入值Go中小数点后2位的减半_Go_Rounding - Fatal编程技术网

四舍五入值Go中小数点后2位的减半

四舍五入值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的精确值 不要溢出 实现限制:尽管数值常量具有任意 在语言中,编译

使用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的精确值 不要溢出

实现限制:尽管数值常量具有任意 在语言中,编译器可以使用 精度有限的内部表示。也就是说,每个 实施必须:

  • 表示浮点常量,包括复数常量的部分,尾数至少为256位,带符号
    至少16位的二进制指数
  • 如果由于精度限制而无法表示浮点或复常量,则四舍五入到最接近的可表示常量
这些要求既适用于文字常量,也适用于结果 计算常量表达式的方法

常量表达式只能包含常量操作数,并且是 在编译时计算

常量表达式总是精确计算;中间值 而常数本身可能需要很大的精度 大于语言中任何预声明类型支持的值

实现限制:编译器可以在 计算非类型浮点或复杂常量表达式;看见 常量部分中的实现限制。这 舍入可能会导致浮点常量表达式无效 在整数上下文中,即使它在计算时是整数 使用无限精度,反之亦然


实现
roundhalup
函数,就像Go编译器对
math.Round(1.015*100)/100所做的那样
1.015*100
是一个非类型化的浮点常量表达式。使用至少256位精度的
math/big
软件包。Go
float64
(IEEE-754 64位浮点)具有53位精度

例如,使用256位精度(常量表达式)

游乐场:

输出:

1.02
1.01

如果我们只使用53位精度(
float64
):

游乐场:

输出:

1.02
1.01
看见表达式
1.015*100
为a,并精确计算。表达式
x*100
使用float64s进行计算。