将分数乘以数字求和并四舍五入以等于数字?

发布于 2024-12-19 12:26:32 字数 165 浏览 1 评论 0原文

在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

各自安好 2024-12-26 12:26:32

使用最大余数法

第1步:将数字乘以< code>n (在这种情况下,让我们使用一个不能立即很好地证明 LRM 仍然有效的 n ;我选择 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

Use the Largest Remainder Method:

Step 1: Multiply the numbers by n (in this case, let's use an n 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.

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

Step 2: Sum up the whole number parts

221 + 221 + 147 + 73 + 73 = 735

Step 3: Sort the remainders from highest to lowest

High to low: 0.7, 0.7, 0.4, 0.1, 0.1

Step 4: Add 1 to the whole number components with the associated largest remainders until the sum equals n.

In our case, we are 2 away from the target sum (737), and 0.7 is the largest remainder, which occurs twice. 0.7 is associated with 0.1, so add 1 to 0.1's whole number.

Your final list is:

221
221
147
74
74
岁月静好 2024-12-26 12:26:32

如果进行乘法、舍入和求和,则无法保证结果。为什么不先求和,然后乘法,然后舍入呢?

You can't guarantee it if you multiply, round, and sum. Why don't you sum first, then multiply, then round?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文