Представьте, что у меня есть контейнер 4x5 с 20 доступными слотами внутри. В этом контейнере у меня 13 квадратов и 7 кругов:
![enter image description here](https://i.stack.imgur.com/2eJRo.png)
Но теперь контейнер сжимается до 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](https://i.stack.imgur.com/Qzks9.png)