golang实现四舍五入

go中没有对float64进行四舍五入的函数,
只有:
math.Floor:向下取整
math.Ceil:向上取整

但可以用以下方法达到四舍五入的效果

func Round(v float64) int {
	return int(math.Floor(v + 0.5))
}

单测:

func TestRound(t *testing.T) {
	assert.Equal(t, 4, Round(4.1))
	assert.Equal(t, 5, Round(4.5))
}

结果:
4
5
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用最大剩余法处理四舍五入的百分比之和不为100%的问题的golang代码实现: ```go package main import ( "fmt" "math" ) func round(x float64) float64 { return math.Floor(x + 0.5) } func calculatePercentage(numbers []float64) []float64 { n := len(numbers) A := make([][]float64, n+1) for i := 0; i <= n; i++ { A[i] = make([]float64, n+1) } b := make([]float64, n+1) for i := 0; i < n; i++ { A[i][i] = 1 b[i] = round(numbers[i] * 100) } A[n][n] = 1 x := maxDantzig(A, b) if x == nil { return nil } percentages := make([]float64, n) for i := 0; i < n; i++ { percentages[i] = x[i] / x[n] * 100 } return percentages } func maxDantzig(A [][]float64, b []float64) []float64 { rows := len(A) cols := len(A[0]) x := make([]float64, cols) w := make([]float64, cols) for i := 0; i < cols; i++ { w[i] = -1 } for { maxW := 0.0 maxWIdx := -1 for i := 0; i < cols; i++ { if w[i] > maxW { maxW = w[i] maxWIdx = i } } if maxWIdx == -1 { break } maxRatio := math.Inf(-1) maxRatioIdx := -1 for i := 0; i < rows; i++ { if A[i][maxWIdx] > 0 { ratio := b[i] / A[i][maxWIdx] if ratio > maxRatio { maxRatio = ratio maxRatioIdx = i } } } if maxRatioIdx == -1 { return nil } x[maxWIdx] = b[maxRatioIdx] / A[maxRatioIdx][maxWIdx] for i := 0; i < cols; i++ { w[i] = 0 } for i := 0; i < rows; i++ { b[i] -= x[maxWIdx] * A[i][maxWIdx] for j := 0; j < cols; j++ { w[j] += math.Abs(b[i]) * A[i][j] } } } return x } func main() { numbers := []float64{1.234, 2.345, 3.456, 4.567} percentages := calculatePercentage(numbers) if percentages == nil { fmt.Println("Unable to calculate percentages") } else { fmt.Println(percentages) } } ``` 这里实现了一个calculatePercentage函数,参数numbers是一个一维的浮点数数组,表示需要计算百分比的数字。函数返回一个一维的浮点数数组,表示计算得到的百分比值。如果无法计算百分比,则返回nil。 在函数中,首先将需要计算百分比的数字乘以100,然后将它们分别四舍五入到最近的整数,并将它们作为线性规划问题的约束条件。然后,使用最大剩余法求解该线性规划问题,得到每个数字对应的变量值。最后,将变量值转化为百分比值,即可得到最终的百分比结果。 需要注意的是,由于最大剩余法是一种整数线性规划方法,在处理小数时可能会出现误差。因此,在实际应用中,应该采用高精度数值计算库,以保证计算结果的精度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值