在JavaScript中 给定(x)这样的分数:
0.3
0.3
0.2
0.1
0.1
(总和为1)
当我将这些乘以数字(n),比如1000,并将结果四舍五入为整数时,如何确保这些整数的总和等于(n)?
答案 0 :(得分:3)
第1步:将数字乘以n
(在这种情况下,让我们使用不会立即解决的n
证明LRM仍然有效;我选择737),并分离整个和小数部分。
0.3 * 737 = 221 + 0.1
0.3 * 737 = 221 + 0.1
0.2 * 737 = 147 + 0.4
0.1 * 737 = 73 + 0.7
0.1 * 737 = 73 + 0.7
第2步:总结整数部分
221 + 221 + 147 + 73 + 73 = 735
第3步:将余数从最高到最低排序
High to low: 0.7, 0.7, 0.4, 0.1, 0.1
第4步:将1
添加到包含相关最大余数的整数组件,直到总和等于n
。
在我们的例子中,我们离目标总和(737
)2,而0.7
是最大的余数,它出现两次。 0.7
与0.1
相关联,因此请在0.1
的整数中添加1。
您的最终名单是:
221
221
147
74
74
答案 1 :(得分:0)
如果你乘以,舍入和求和,你不能保证。为什么不首先求和,然后乘以,然后求圆?