Суммирующие и округляющие дроби умножаются на число до равного числа? - PullRequest
2 голосов
/ 02 декабря 2011

в JavaScript, Учитывая (х) количество фракций, как это:

0.3
0.3
0.2
0.1
0.1

(это сумма к 1)

Как я могу убедиться, что когда я умножу их на число (n), скажем 1000, и округлю результаты до целых чисел, сумма этих целых будет равна (n)?

Ответы [ 2 ]

3 голосов
/ 02 декабря 2011

Используйте Метод наибольшего остатка :

Шаг 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.

В нашем случае мы находимся на 2 от целевой суммы (737), и 0.7 является наибольшим остатком,что происходит дважды.0.7 связано с 0.1, поэтому добавьте 1 ко всему номеру 0.1.

Ваш окончательный список:

221
221
147
74
74
0 голосов
/ 02 декабря 2011

Вы не можете гарантировать это, если умножаете, округляете и суммируете. Почему бы вам сначала не сложить, затем умножить, а затем округлить?

...