Javascript 将十进制数视为整数

Javascript 将十进制数视为整数,javascript,jquery,decimal,Javascript,Jquery,Decimal,有没有办法将costPerCan乘以整数而不是小数来计算总数 使用Math.floor将其显示为一个整数“罐数”,但如果例如“罐数”=1,则总数应为18.23英镑 目前,canCount在等式中被视为十进制 $('input').keyup(function () { // run anytime the value changes var width = parseFloat($('#width').val()); var height = parseFloat($('#height')

有没有办法将costPerCan乘以整数而不是小数来计算总数

使用Math.floor将其显示为一个整数“罐数”,但如果例如“罐数”=1,则总数应为18.23英镑

目前,canCount在等式中被视为十进制

$('input').keyup(function () { // run anytime the value changes


var width = parseFloat($('#width').val()); 
var height = parseFloat($('#height').val());
var SqMetresPerCan = parseFloat($('#per-can').val());
var costPerCan = parseFloat($('#cost').val());
var sizePerCan = parseFloat($('#size').val());

var canCount = width * height / SqMetresPerCan;

$('#added').html((canCount * costPerCan).toFixed(2));
$('#cans').html(Math.round(canCount.toFixed(2)));

所有代码都在这里:

因为你不能买罐头的一部分,你必须把它四舍五入到下一个最高的整数,所以

var canCount = Math.ceil(width * height / SqMetresPerCan);

一旦你有了一个完整的罐子数量,你的总价格将是正确的。

你实际上想把罐子数量四舍五入到最低的整数,假设你有一个容器的尺寸,宽度和高度,你想把一些罐子装进去,而不需要在你第一次计算它时经过Math.floor

var canCount = Math.floor(width * height / SqMetresPerCan);
如果您像另一张海报所说的那样使用Math.ceil,那么您将计算首先超出所提供空间的罐头数量。我想这可能是你想要的,甚至是别的什么,但你没有描述你的意图

现在,如果你想把罐头装到一个特定尺寸的容器中,实际上你已经解开了一个更难的问题,因为(大多数)罐头只能是一个圆形,它们不会挤压来填满彼此之间的空间。所以会有很多你不能使用的空间

有关打包算法的讨论,请参阅这篇维基百科文章:

但是,您有一个变量SqMetresPerCan,它可能包括将can强制放入网格的填充,这使问题变得更简单,但仍然不如上面的代码片段那么简单。此外,网格可能必须是统一的,这使得花哨的方形布局算法毫无用处

在这种情况下,您必须计算适合“宽度方向”的罐子数量,然后计算适合“高度方向”的罐子数量,并将它们相乘。如果网格中的can占用x SqMetresPerCan,则其宽度和高度均为Math.sqrtx。例如,如果一个罐子的SqMetresPerCan=9,那么它在每个方向上占用的长度将是Math.sqrt9=3。继续这个例子,如果我们有一个1000x1平方米的容器,我们不能装任何罐头,因为罐头不能在任何方向挤压。相反,如果它是一个1000x3的容器,它可以容纳333个罐而不是0个罐,因为最小的尺寸现在足以容纳一个罐。考虑到这一点,canCount的改进方法是:

var canUnit = Math.sqrt(SqMetresPerCan)
var canCount = Math.floor(width/canUnit)*Math.floor(height/canUnit)
然后:

$('#added').html((canCount * costPerCan).toFixed(2));
$('#cans').html(canCount);

所以我们首先做的是完全忽略大小,因为当我们使用SqMetresPerCan时,我们完全不清楚应该如何使用它。然后我们计算一个罐子的一个尺寸,假设有填充物可以把一个圆变成一个正方形。我们不关心地板,因为我们只是在处理尺寸。然后,我们通过将容器尺寸除以罐在该方向上的假定尺寸来计算适合每个方向的罐的数量,并将它们相乘,得到作为整数的罐总数,我们可以使用toFixed立即打印。将该整数乘以costPerCan得到总成本,我们应该使用它来固定2,因为它是货币

非常感谢您的努力,非常感谢:但是我的计算器并不像您所解释的那样复杂,我应该为没有很好地解释我的意图而受到责备;它按宽度和高度计算绘制区域曲面所需的总成本和最小罐数。如果罐的数量是一个整数和一个分数,我需要将这个数字四舍五入,以便它告诉客户喷漆所需的最小面积。