如何在golang中的整数运算中获得最近的整数?

如何在golang中的整数运算中获得最近的整数?,go,rounding,Go,Rounding,我想得到两个整数除法运算的最近值。我的初始函数是这样的,它总是舍入到较低的整数 func Percent(x int, y int) int { p := x * 100 / y return p } 例如,当结果为5.75时,我希望四舍五入到6,但上面的函数返回5 我尝试使用math.Round,但它需要接收一个float类型并返回一个float类型。因此,这需要大量的转换,因为操作中有许多参数,所以转换会变脏 所以我想知道什么是将整数四舍五入

我想得到两个整数除法运算的最近值。我的初始函数是这样的,它总是舍入到较低的整数

func Percent(x int, y int) int {
            p := x * 100 / y
            return p
}
例如,当结果为
5.75
时,我希望四舍五入到
6
,但上面的函数返回
5

我尝试使用
math.Round
,但它需要接收一个
float
类型并返回一个float类型。因此,这需要大量的转换,因为操作中有许多参数,所以转换会变脏


所以我想知道什么是将整数四舍五入到最接近的整数的干净方法?

只需从整数中创建浮点值,然后从四舍五入的浮点结果中创建一个整数值:

func RoundPercent(x int,y int)int{
p:=float64(x*100)/float64(y)
返回整数(数学四舍五入(p))
}

您的操作使用的是all integer,因此输出将是一个整数,因此您肯定需要首先将它们转换为浮点,然后您可以将浮点转换为最接近的int(5.75到5)

为此,下面的代码将为您工作你甚至不需要使用数学。Round

func Percent(x int, y int) int {
    p := float64(x * 100) / float64(y)
    return int(p+0.5)
}

比如
(x*10000/y+50)/100
?这对这里的简单公式有效,但我正在寻找更一般的解决方案。对于任何整数结果,一般的解决方案不是更精确地计算它(乘以10,100,100),将
0.5
的等效值相加,然后除以乘数?@rsp精细解。直到溢出为止。@Volker,显然,您必须在计算代码中考虑溢出,但对所有代码都是如此。特别是如果您不想通过优化整数计算来使用浮点。