【问题标题】:calculate average number in textbox计算文本框中的平均数
【发布时间】:2015-06-11 16:06:03
【问题描述】:

我有一个包含多个文本框的表单。用户将使用所需文本框的数量。当然是有限制的。如何使用 JavaScript 找出有多少文本框包含数据?

示例:如果用户在三个文本框中输入了数字,我希望得到 3 作为结果。另外,有了这个数字,我想要文本框的平均值(不为空)。因此,如果三个文本框有值,它们是 56、78 和 78,我会期望 (56 + 78 + 78) / 3。

Function send() {
val1 = parseFloat(document.form1.valeur_2.value);
if (isNaN(val1) == true ) val1=0;

val2 = parseFloat(document.form1.valeur_3.value);
if (isNaN(val2) == true ) val2=0;

val3 = parseFloat(document.form1.valeur_4.value);
if (isNaN(val3) == true ) val3=0;

val4 = parseFloat(document.form1.valeur_5.value);
if (isNaN(val4) == true ) val4=0;

val5 = parseFloat(document.form1.valeur_6.value);
if (isNaN(val5) == true ) val5=0;
document.form1.total.value = val1 + val2 + val3 + val4 + val5
} 

我想除以用户输入的文本框数 取平均值

【问题讨论】:

  • parseFloat如果没有值可能会提示异常
  • 不要在最后加起来,而是检查每个值 !isNaN,如果为真,则将其添加到运行总计中。同时,增加一个有效值的计数器。然后,您只需将运行总数除以最后的计数器即可获得平均值。要获得奖励积分,请将所有文本框放入一个数组中,以便循环遍历它,或者更好的是使用类选择器并循环遍历集合。

标签: javascript


【解决方案1】:

你需要计算你找到了多少个有效值。

您可以简单地使用两个变量:

  • 字段中输入的有效金额总和
  • 当您在字段中找到有效金额时,您会增加 +1。

最后,您返回除法总和/有效平均值。

如果没有字段包含值,请注意除以 0。

【讨论】:

    【解决方案2】:

    据我所知,您需要另一个带有循环的计数器来计算 NaN 的出现次数 - 否则,将不会评估输入的 0。

    一旦你有了它,你就可以很容易地除以那个计数器。所以你可以这样做:

    Function send() {
    count = 0;
    val1 = parseFloat(document.form1.valeur_2.value);
    if (isNaN(val1) != true ) {
        count++;
    } else {
        val1 = 0;
    }
    // repeat this for the other numbers as well
    
    val2 = parseFloat(document.form1.valeur_3.value);
    if (isNaN(val2) == true ) val2=0;
    
    val3 = parseFloat(document.form1.valeur_4.value);
    if (isNaN(val3) == true ) val3=0;
    
    val4 = parseFloat(document.form1.valeur_5.value);
    if (isNaN(val4) == true ) val4=0;
    
    val5 = parseFloat(document.form1.valeur_6.value);
    if (isNaN(val5) == true ) val5=0;
    document.form1.total.value = (val1 + val2 + val3 + val4 + val5) / count;
    } 
    

    【讨论】:

      【解决方案3】:

      有更优雅的方法可以做到这一点,但使用普通的 Javascipt 并保持它(希望)易于理解:

      var btn = document.getElementById("calc");
      btn.addEventListener("click", function() {
          var total = 0;
          var count = 0;
          var values = document.getElementsByClassName("value");
          for (var i = 0; i < values.length; i++) {
              var num = parseFloat(values[i].value);
              if (!isNaN(num)) {
                  total += num;
                  count++;
              }
          }
          var totalTb = document.getElementById("total");
          totalTb.value = count ? total / count : "NaN";
      });
      <form id="form1">
          <input class="value" type="text"/>
          <input class="value" type="text"/>
          <input class="value" type="text"/>
          <input class="value" type="text"/>
          <input class="value" type="text"/>
          <br/><input type="text" id="total" readonly/>
          <input type="button" id="calc" value="calculate"/>
      </form>

      我们将一个类附加到我们的输入中,以便我们可以使用getElementsByClassName 选择它们。然后我们遍历该集合并尝试解析每个集合中的值。如果它是一个有效数字(即isNaN 返回false),我们将它添加到运行总数中,并增加一个计数器来记录我们找到了多少好的值。在循环之后,我们只需将总数除以计数(在检查计数大于0 之后)。

      【讨论】:

      • 这很酷,但我只想在文本框上显示,并且在用户输入一个值后,第二个文本框会自动出现,依此类推。每次用户添加更多文本框时,平均结果会自动在另一个文本框中弹出
      猜你喜欢
      • 2014-07-30
      • 1970-01-01
      • 1970-01-01
      • 2017-09-24
      • 2016-03-03
      • 2017-01-02
      • 1970-01-01
      相关资源
      最近更新 更多