相关疑难解决方法(0)

如何在保留总和的同时将浮点数舍入为整数?

假设我有一个浮点数数组,按排序(让我们说升序)排序,其总和已知是一个整数N.我希望将这些数字"舍入"为整数,同时保持其总和不变.换句话说,我正在寻找一种算法,将浮点数数组(称之为 fn)转换为整数数组(称之为in),这样:

  1. 两个数组的长度相同
  2. 整数数组的总和是 N
  3. 每个浮点数fn[i]与其对应的整数之间的差值in[i]小于1(或者如果你真的必须等于1)
  4. 假设浮点数按排序顺序(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, …

language-agnostic algorithm rounding

51
推荐指数
4
解决办法
9717
查看次数

围绕Python的数字列表并保持其总和

我在Python中有一个列表或十进制数组.我需要将它们舍入到最接近的2位小数,因为它们是货币金额.但是,我需要保持总和,即舍入到2位小数的原始数组的总和必须等于数组的舍入元素的总和.

到目前为止,这是我的代码:

myOriginalList = [27226.94982, 193.0595233, 1764.3094, 12625.8607, 26714.67907, 18970.35388, 12725.41407, 23589.93271, 27948.40386, 23767.83261, 12449.81318]
originalTotal = round(sum(myOriginalList), 2)
# Answer = 187976.61

# Using numpy
myRoundedList = numpy.array(myOriginalList).round(2)
# New Array = [ 27226.95    193.06   1764.31  12625.86  26714.68  18970.35  12725.41 23589.93 27948.4   23767.83  12449.81]

newTotal = myRoundedList.sum()
# Answer = 187976.59
Run Code Online (Sandbox Code Playgroud)

我需要一种有效的方法来修改我的新圆形数组,使得总和也是187976.61.2便士差异需要应用于项目7和6,因为它们在舍入条目和原始条目之间具有最大差异.

python numpy sum rounding

8
推荐指数
3
解决办法
3606
查看次数

标签 统计

rounding ×2

algorithm ×1

language-agnostic ×1

numpy ×1

python ×1

sum ×1