假设我有一个浮点数数组,按排序(让我们说升序)排序,其总和已知是一个整数N.我希望将这些数字"舍入"为整数,同时保持其总和不变.换句话说,我正在寻找一种算法,将浮点数数组(称之为 fn)转换为整数数组(称之为in),这样:
Nfn[i]与其对应的整数之间的差值in[i]小于1(或者如果你真的必须等于1)fn[i] <= fn[i+1]),整数也将按排序顺序(in[i] <= in[i+1])鉴于满足这四个条件,sum((in[i] - fn[i])^2)最好将舍入方差()最小化的算法,但这并不是什么大问题.
例子:
[0.02, 0.03, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1, 0.11, 0.12, 0.13, 0.14]
=> [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
[0.1, 0.3, 0.4, 0.4, 0.8]
=> [0, 0, 0, 1, 1]
[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]
=> [0, 0, 0, … 我有一组非负值.我想构建一个值为20的值数组,以便它们与第一个数组成比例.
这将是一个简单的问题,除了我希望比例数组总和精确到20,补偿任何舍入误差.
例如,数组
input = [400, 400, 0, 0, 100, 50, 50]
Run Code Online (Sandbox Code Playgroud)
会屈服
output = [8, 8, 0, 0, 2, 1, 1]
sum(output) = 20
Run Code Online (Sandbox Code Playgroud)
但是,大多数情况都会有很多舍入错误,比如
input = [3, 3, 3, 3, 3, 3, 18]
Run Code Online (Sandbox Code Playgroud)
天真的收益率
output = [1, 1, 1, 1, 1, 1, 10]
sum(output) = 16 (ouch)
Run Code Online (Sandbox Code Playgroud)
是否有一种分配输出数组的好方法,每次最多可以增加20个?
我有一个总计为整数的浮点数列表。由于种种原因,我必须使用for循环x 进行迭代,x是列表中的每个浮点数,但是由于range()函数的参数必须是整数,因此每个浮点数必须取整。但是,我希望循环的总数保持等于原始浮点数的总和,通常不将其总计为四舍五入的总和。您将如何解决这个问题?谢谢。