求和和舍入分数乘以数字等于数字?

时间:2011-12-02 19:45:23

标签: javascript rounding fractions

在JavaScript中 给定(x)这样的分数:

0.3
0.3
0.2
0.1
0.1

(总和为1)

当我将这些乘以数字(n),比如1000,并将结果四舍五入为整数时,如何确保这些整数的总和等于(n)?

2 个答案:

答案 0 :(得分:3)

使用Largest Remainder Method

第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.70.1相关联,因此请在0.1的整数中添加1。

您的最终名单是:

221
221
147
74
74

答案 1 :(得分:0)

如果你乘以,舍入和求和,你不能保证。为什么不首先求和,然后乘以,然后求圆?