Javascript 计算要填充的可用插槽数量

Javascript 计算要填充的可用插槽数量,javascript,math,iteration,Javascript,Math,Iteration,假设我有一个4x5容器,里面有20个可用插槽。在这个容器中,我有13个正方形和7个圆圈: 但现在容器缩小到3x3,只有9个可用插槽 我想在这个较小的容器中显示相同比例的正方形和圆形,最后一个是剩余的一堆物品 现在,我计算每种类型的物品的数量,除以所有物品的总数,得到该类型物品占总数的百分比值,然后乘以容器大小: const percentage = typeCount / totalCount; const spaceUnrounded = percentage * availableSlot

假设我有一个4x5容器,里面有20个可用插槽。在这个容器中,我有13个正方形和7个圆圈:

但现在容器缩小到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是20的65%,9的65%是5.85:

选择您希望成为“权威”的数字(圆形或正方形,无所谓),然后从插槽总数中减去该数字,得到另一个数字

> slots = 20
> squares = 13
> circles = 7
> newslots = 9
> newsquares = Math.round(newslots/slots*squares)
6
> newcircles = newslots - newsquares
3

例如,从上面的图像中,您的预期输出是什么?问题是,在上面的示例中,您有偶数个正方形。在所需的输出中,有奇数个正方形。您需要确定如何处理这个额外的正方形——您希望它是正方形还是圆形?使用预期输出进行更新@黑曜石-方块永远不应该变成圆形。如果只有两种类型,这是可行的,但有可能有三种或更多。这将如何处理
n
类型的数量?假设您有n个形状:
(n=1,2,3,n)
。然后,对于
n来说,我们已经开始尝试了——效果很好,谢谢!