【问题标题】:Javascript Form Math RoundingJavascript 表单数学舍入
【发布时间】: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


【解决方案1】:

你应该只为价值/ 5下限

document.getElementById('total').value = Math.floor(tot / 5) + Math.floor(totG / 3) + totB;
document.getElementById('total2').value = Math.floor(tot / 5) * 2 + (Math.floor(totG / 3) * 2) + (totB * 2);
document.getElementById('total3').value = Math.floor(tot / 5) * 6 + (Math.floor(totG / 3) * 6) + (totB * 6);

【讨论】:

  • 我最终需要对整个事情进行math.floor,因为我使用这个新代码得到了小数。
  • 把它全部包裹在另一个 Math.floor 中。如果这不是您要查找的内容,您可能需要在问题中进行更多解释。
  • document.getElementById('total').value = Math.floor(tot / 5) + Math.floor(totG / 3) + totB;这似乎有效
  • 任何一种方式都应该有效。尽管根据您的最后评论更新了答案
猜你喜欢
  • 2021-10-13
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多