我一直在阅读很多关于数字四舍五入的帖子,但我无法做到我想做的事情:
我有一张正浮标列表。 要使用的无符号整数 roundOffStep 是用户定义的。我无法控制其他。
我希望能够在保留这些数字的总和的同时进行最精确的舍入,或者至少在保持新总和低于原始总和的同时。
我该怎么做?我对算法很糟糕,所以这对我来说太棘手了。
THX。
编辑:添加测试用例:
FLOATS
29.20
18.25
14.60
8.76
2.19
sum = 73;
让我们说roundOffStep = 5;
ROUNDED FLOATS
30
15
15
10
0
sum = 70< 73好的
答案 0 :(得分:1)
roundOffStep
的最接近的倍数。rounded_number - original_number
。按递减顺序对差异列表进行排序,以便找到差异最大的数字。rounded_number - original_number
的数字,然后从该数字中减去roundOffStep
。此过程应确保舍入的数字尽可能接近原始数字,而不会超过原始总和。
示例,roundOffStep = 5
:
Original Numbers | Rounded | Difference
----------------------+------------+--------------
29.20 | 30 | 0.80
18.25 | 20 | 1.75
14.60 | 15 | 0.40
8.76 | 10 | 1.24
2.19 | 0 | -2.19
----------------------+------------+--------------
Sum: 73 | 75 |
总和太大,所以我们选择给出最大差异的数字(18.25舍入为20)并减去5得到15.现在总和是70,所以我们已经完成了。