首页 > 解决方案 > 使用纯 Javascript 进行计算

问题描述


多年来我一直在学习堆栈溢出,但这是我的第一个问题。
我尝试用 java 脚本构建一个价格计算器。

这个想法是选择一个许可证模型(选择器),然后使用一个基本价格(通过输入字段),选择与乘法因子相关联的用户量词(通过输入字段)。最后,基本价格将相乘并显示最终价格。

我很满意数学部分是正确的,但是我必须排除语法错误。我希望这是一个有价值的问题,因为我被这个问题困住了一段时间。

如果有人对此有一些意见,那就太好了,谢谢。

以下是我的想法:

// get input from inputfiels
var Licence = parseInt(document.getElementById("Licence").value);
var Quantity = parseInt(document.getElementById("Quantity").value);
var Basis = parseInt(document.getElementById("Basis").value);

// Desktop User numbers
var User = [3, 8, 16, 36, 50];

// Web View numbers
var View = [20, 50, 80, 200, 500];

// linked multiply factor (eg. 16 users = multiply factor x 3, or 50 views = multiply factor x 2)
var Multiply = [1, 2, 3, 4, 5];

// Calcutation Desktop
function Desktop_Kernel(Quantity, Basis) {
  var index;
  for (index of Multiply) {
    if (User[index - 1] == Quantity) {
      return Basis * Multiply[index - 1];
    }
  }
}

// Calcutation Web
function Web_Kernel(Quantity, Basis) {
  var index;
  for (index of Multiply) {
    if (View[index - 1] == Quantity) {
      return Basis * Multiply[index - 1];
    }
  }
}

// Licece Model: Desktop or Web
function Licence_Selector() {
  if (Licence == 1) {
    var Price = Desktop_Kernel(Quantity, Basis);
  } else if (Licence == 2) {
    var Price = Web_Kernel(Quantity, Basis);
  }

  document.getElementById("Price").value = Price;
}
// show output
document.getElementById("Price").value = Desktop_Kernel(Quantity, Basis);
       
<select id="Licence">
  <option value="1">Desktop</option>
  <option value="2">Web</option>
</select>

<input type="number" id="Basis" placeholder="Basis Price" >
<input type="number" id="Quantity" placeholder="Quantity">

<input type="button" value="Display Price" onclick="Licence_Selector()">
<input type="text" id="Price">

标签: javascript

解决方案


  • 您需要读取计算函数中的输入。
  • 不需要两个只改变一个变量的内核函数;而是将该列表作为参数传递。
  • 我不确定你的计算是否正确;如果 Quantity 未在 User/View 数组中列出,则它将始终返回undefined. 是否应该>=代替==, 来拥有一个层级系统?(我这样更正了,不知道你是不是这个意思。)

// Desktop User numbers
var User = [3, 8, 16, 36, 50];

// Web View numbers
var View = [20, 50, 80, 200, 500];

// linked multiply factor (eg. 16 users = multiply factor x 3, or 50 views = multiply factor x 2)
var Multiply = [1, 2, 3, 4, 5];

function Kernel(Numbers, Quantity, Basis) {
  var index;
  for (index of Multiply) {
    if (Numbers[index - 1] >= Quantity) {
      return Basis * Multiply[index - 1];
    }
  }
}

// Licece Model: Desktop or Web
function Recalculate() {
  // get input from inputfields
  var Licence = parseInt(document.getElementById("Licence").value);
  var Quantity = parseInt(document.getElementById("Quantity").value);
  var Basis = parseInt(document.getElementById("Basis").value);
  var Numbers = (Licence == 1 ? User : View);
  var Price = Kernel(Numbers, Quantity, Basis);
  document.getElementById("Price").value = Price;
}
       
<select id="Licence" value="1">
  <option value="1">Desktop</option>
  <option value="2">Web</option>
</select>

<input type="number" id="Basis" placeholder="Basis Price" >
<input type="number" id="Quantity" placeholder="Quantity">

<input type="button" value="Display Price" onclick="Recalculate()">
<input type="text" id="Price">


推荐阅读