Расчет количества доступных слотов для заполнения - PullRequest
0 голосов
/ 03 сентября 2018

Представьте, что у меня есть контейнер 4x5 с 20 доступными слотами внутри. В этом контейнере у меня 13 квадратов и 7 кругов:

enter image description here

Но теперь контейнер сжимается до 3x3, только с 9 доступными слотами.

Я хочу показать такое же соотношение квадратов и кругов внутри этого меньшего контейнера, причем последним из них является стопка оставшихся предметов.

Прямо сейчас я беру счетчик каждого типа элемента, деленный на общее количество всех элементов, чтобы получить процентное значение от того, сколько этот тип составляет общее количество, а затем умножая его на размер контейнера. :

const percentage = typeCount / totalCount;
const spaceUnrounded = percentage * availableSlots;

Так что это не проблема. Проблема возникает, когда мне нужно округлить это в целое число, чтобы получить правильное количество слотов. Прямо сейчас я нахожу пол значения:

const space = Math.floor(spaceUnrounded);

Но это приводит к тому, что предметы оставляют 1 место пустым. Я также попытался найти потолок значения для первого типа, а затем слово для остальных:

const space = index === 0 ? Math.ceil(spaceUnrounded) : Math.floor(spaceUnrounded);

Но это может привести к тому, что элементы добавят 1 дополнительное пространство в зависимости от количества типов элементов.

Math.round имеет ту же проблему.

Что я могу сделать здесь?

РЕДАКТИРОВАТЬ: Мой ожидаемый результат будет, вероятно, 6 квадратов и 3 круга, так как 13 65% от 20, а 65% 9 5,85:

enter image description here

1 Ответ

0 голосов
/ 03 сентября 2018

Укажите, какое число (кружки или квадраты, не имеет значения) вы хотите быть «авторитетным», затем вычтите это число из общего числа слотов, чтобы получить другое число.

> slots = 20
> squares = 13
> circles = 7
> newslots = 9
> newsquares = Math.round(newslots/slots*squares)
6
> newcircles = newslots - newsquares
3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...