【发布时间】:2015-05-06 05:49:01
【问题描述】:
所以我正在尝试制作一个简单的表格,它采用一系列数字(或缺少数字)并将它们相加,然后进行一些除法和乘法运算。
那部分工作得很好。我遇到的问题是舍入。我在谷歌上搜索了一下这个问题,发现有几个人提到了 Math.round 或 Math.abs 或 Math.ceil 等等。但这些都不适合我(但我可能做错了)。
第一个总计(需要糖)完美运行,第二个和第三个总计不按我需要的方式工作。
它需要取第一个数字(假设是“玉米”)并将该数字除以 5,然后将其乘以 2,再乘以 6,5 玉米的结果将是 1 糖、2 发酵罐、6 水.但不允许 5 或 0 以外的任何数字。这意味着如果我输入这样的内容:玉米 8,结果需要再次为 1 糖、2 发酵罐、6 水。但我得到的是 1 个糖、3 个发酵罐、9 个水。
totG 和 totB 值的类似问题。
function findTotal() {
var arr = document.getElementsByName('qty');
var tot = 0 | 0;
for (var i = 0; i < arr.length; i++) {
if (parseInt(arr[i].value))
tot += parseInt(arr[i].value);
}
var arr = document.getElementsByName('qtyG');
var totG = 0 | 0;
for (var i = 0; i < arr.length; i++) {
if (parseInt(arr[i].value))
totG += parseInt(arr[i].value);
}
var arr = document.getElementsByName('qtyB');
var totB = 0 | 0;
for (var i = 0; i < arr.length; i++) {
if (parseInt(arr[i].value))
totB += parseInt(arr[i].value);
}
document.getElementById('total').value = Math.floor(tot / 5 + totG / 3 + totB);
document.getElementById('total2').value = Math.floor(((tot / 5) * 2) + ((totG / 3) * 2) + (totB * 2));
document.getElementById('total3').value = Math.floor(((tot / 5) * 6) + ((totG / 3) * 6) + (totB * 6));
}
<table>
<tr>
<td>
Corn
</td>
<td>
<input onblur="findTotal()" type="text" name="qty" id="qty1" />
</td>
</tr>
<tr>
<td>
Corn - Green Tier
</td>
<td>
<input onblur="findTotal()" type="text" name="qtyG" id="qty2" />
</td>
</tr>
<td>
Corn - Blue Tier
</td>
<td>
<input onblur="findTotal()" type="text" name="qtyB" id="qty3" />
</td>
</tr>
<tr>
<td>
Potato
</td>
<td>
<input onblur="findTotal()" type="text" name="qty" id="qty4" />
</td>
</tr>
<tr>
<td>
Potato - Green Tier
</td>
<td>
<input onblur="findTotal()" type="text" name="qtyG" id="qty5" />
</td>
</tr>
<tr>
<td>
Potato - Blue Tier
</td>
<td>
<input onblur="findTotal()" type="text" name="qtyB" id="qty6" />
</td>
</tr>
<td>
Barley
</td>
<td>
<input onblur="findTotal()" type="text" name="qty" id="qty7" />
</td>
</tr>
<tr>
<td>
Barley - Green Tier
</td>
<td>
<input onblur="findTotal()" type="text" name="qtyG" id="qty8" />
</td>
</tr>
<tr>
<td>
Barley - Blue Tier
</td>
<td>
<input onblur="findTotal()" type="text" name="qtyB" id="qty9" />
</td>
</tr>
<tr>
<td>
Sweet Potato
</td>
<td>
<input onblur="findTotal()" type="text" name="qty" id="qty10" />
</td>
</tr>
</table>
<table>
<tr>
<td>
Sugar Needed
</td>
<td>
<input type="text" name="total" id="total" />
</td>
</tr>
<tr>
<td>
Fermenter Needed
</td>
<td>
<input type="text" name="total" id="total2" />
</td>
</tr>
<tr>
<td>
Water Needed
</td>
<td>
<input type="text" name="total" id="total3" />
</td>
</tr>
</table>
【问题讨论】:
-
"但不允许 5 或 0 以外的任何数字。" - 你的意思是数量?不知道我是否理解。尝试更精确。如果玉米不允许使用 5 或 0 以外的任何数字,那么我只需检查该数字,如果它不是 0 或 5,则将其替换为默认值。这有什么问题?
标签: javascript math rounding