将十进制视为整数

时间:2014-09-16 20:06:30

标签: javascript jquery decimal

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

它显示为使用Math.floor BUT的整数('Cans'数量),例如'No. Cans'= 1然后Total应该= 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)));

所有代码都在这里:http://jsfiddle.net/5xzSy/523/

2 个答案:

答案 0 :(得分:0)

由于你无法购买罐头的一部分,你必须将其四舍五入到下一个最高的整数,所以

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

一旦你有一整套罐头,你的总价格就会是正确的。

答案 1 :(得分:0)

你真的想把罐头的数量减少到最低的整数(假设你有一个尺寸宽度和高度的容器,你希望装入一定数量的罐子而不需要经过),使用Math.floor()当你第一次计算它。

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

如果您使用Math.ceil作为另一张海报说,那么您将计算首先超过所提供空间的罐数。我想这可能是你所追求的(甚至是其他东西),但你没有描述你的意图。

现在,如果你试图将罐装入具有一定尺寸的容器中,你实际上解开了一个更难的问题,因为[大多数]罐头只能是一个形状(圆形)而且它们不会挤压填充彼此之间的空间。所以你将无法使用很多空间。

有关打包算法的讨论,请参阅此维基百科文章:http://en.wikipedia.org/wiki/Packing_problems

然而,你有一个变量“SqMetresPerCan”,其中可能包含用于强制进入网格的can的填充,使其成为一个更简单的问题,但仍然没有就像上面的代码片段一样简单。另外,该网格可能必须是均匀的,使得花哨的方形包装算法无用。

在这种情况下,您必须计算适合“宽度方向”的罐数,然后计算适合“高度方向”的罐数并将它们相乘。如果网格中的can占用x SqMetresPerCan,则其宽度和高度均为Math.sqrt(x)。例如,如果一个can有SqMetresPerCan = 9,则每个方向占用的长度为Math.sqrt(9) = 3。继续这个例子,如果我们有一个1000x1 SQMetres的容器,我们就无法适应任何罐头,因为罐头不能“挤压”任何一个方向。相反,如果它是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);

所以我们先做的是完全忽略size,因为当我们SqMetresPerCan时,我们完全不清楚应该如何使用它。然后我们计算一个罐子的单个维度,假设有填充“将一个圆圈变成一个正方形”。我们并不关心这里的地板,因为我们只是处理尺寸。然后我们计算适合每个方向的罐数(通过将容器尺寸除以罐子在该方向上的假设尺寸)并将它们相乘以得到罐的总数作为整数,我们可以正确打印远离使用toFixed。将该整数乘以costPerCan以获得总成本,我们应该使用toFixed(2),因为它是货币。