Closed. This question needs to be more focused. It is not currently accepting answers. Learn more
想改进这个问题吗?更新问题,使其只关注一个问题editing this post
我有一个问题,就是提出一个百分比表:

+---+---+---+
| A | B | C |
+---+---+---+
| D | E | F |
+---+---+---+
| G | H | I |
+---+---+---+

ABDE是我可用的全分辨率输入以下关系也应在显示的表中直观地保持:
A + B + C + D = 100
C = A + B
F = D + E
G = A + D
B = E + H
C + F = 100
G + H = 100
I = 100

现在,我不想显示完整的分辨率值,事实上,我想在所有表格单元格中显示0到100范围内的“整数”百分比我担心的是,如果我只是从a、b、c和d中计算c、f、g、h和i,然后对表应用舍入(例如使用toFixed(0)),那么由于边界条件和舍入的统一处理,显示的值可能不会“相加”(即0.5总是向上舍入)。
有没有一种简单的、算法化的、规范化的方法来得到我想要的结果,而不需要解一个a、b、c和d被视为“knowns”、c、f、g和h被视为“unknowns”的(过度约束)联立方程组?在我看来,这也是一个线性规划约束满足问题。我也觉得我可能想得太多了我意识到这个问题没有一个唯一的解决方案,我只是在寻找一种方法来提出一个“合理”的答案你怎么认为?
作为我所担心问题的快速演示,假设a=24.5,B=25.5,D=25.5,E=24.524.5+25.5+25.5+24.5=100。用toFixed(0)四舍五入得出a=25、b=26、d=26和e=25。A+B+D+E=102,G=H=C=F=51。失败。

最佳答案

这是一个四舍五入求和的问题对于这种情况,让我们从一个明确的案例开始:

[24.2, 25.7, 25.5, 24.6]        sum = 100

将每个数字四舍五入;列出第二个差异列表:
[24, 26, 26, 25]    sum = 101
[0.2, -0.3, -0.5, -0.4]

我们有超过1的。我们想用这个改变后的值来改变错误最少的元素:这是舍入后负变化最大的元素,original - rounded这给了我们
[24, 26, 25, 25]    sum = 100
[0.2, -0.3, +0.5, -0.4]

既然总数现在是100,我们就不做改动了如果您有一个更大的例子,有更多的过剩或不足,重复的差异,直到完成。例如,在给定的问题中:
[25, 26, 26, 25]     sum = 102
[-0.5, -0.5, -0.5, -0.5]

我们将减少两个条目因为这四个值是相等的,所以这个算法不关心我们选择哪两个我已经用更多的分隔值完成了这项工作,并且通过应用百分比变化做出了这个选择:这个例子将把26个值都减少到25个。

10-05 20:43
查看更多