将分数乘以数字求和并四舍五入以等于数字?
在 JavaScript 中, 给定 (x) 个这样的分数:(
0.3
0.3
0.2
0.1
0.1
总和为 1)
我如何确保当我将这些分数乘以数字 (n)(例如 1000)并将结果四舍五入为整数时,这些整数的总和将等于(n)?
In JavaScript,
Given (x) number of fractions like this:
0.3
0.3
0.2
0.1
0.1
(That sum to 1)
How can I make sure that when I multiply these by a number (n), say 1000, and round the results to integers, the sum of these integers will equal (n)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用最大余数法:
第1步:将数字乘以< code>n (在这种情况下,让我们使用一个不能立即很好地证明 LRM 仍然有效的
n
;我选择 737),并单独整数部分和分数部分。第 2 步: 将整数部分相加
第 3 步: 将余数从高到低排序
第 4 步: 添加
1 到具有相关最大余数的整数分量,直到总和等于
n
。在我们的例子中,我们距离目标总和 (
737
) 还差 2,而0.7
是最大的余数,出现了两次。0.7
与0.1
相关联,因此在0.1
的整数上加 1。您的最终清单是:
Use the Largest Remainder Method:
Step 1: Multiply the numbers by
n
(in this case, let's use ann
that doesn't immediately work out so nicely to demonstrate that the LRM still works; I choose 737), and separate the whole and fractional parts.Step 2: Sum up the whole number parts
Step 3: Sort the remainders from highest to lowest
Step 4: Add
1
to the whole number components with the associated largest remainders until the sum equalsn
.In our case, we are 2 away from the target sum (
737
), and0.7
is the largest remainder, which occurs twice.0.7
is associated with0.1
, so add 1 to0.1
's whole number.Your final list is:
如果进行乘法、舍入和求和,则无法保证结果。为什么不先求和,然后乘法,然后舍入呢?
You can't guarantee it if you multiply, round, and sum. Why don't you sum first, then multiply, then round?