Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据JavaScript中的数量计算价格的应用程序_Javascript - Fatal编程技术网

根据JavaScript中的数量计算价格的应用程序

根据JavaScript中的数量计算价格的应用程序,javascript,Javascript,我有一个练习,当quaty大于3时,我正在努力理解实现结果的逻辑: 用于计算促销期间将购买的比萨饼(如下所列)价格的应用程序。比萨饼的数量将由用户输入 一个大比萨饼要花6.45美元 两个大比萨饼要12美元 三个大比萨饼要14美元 四家或四家以上的比萨饼将采用上述价格的组合,以确保为客户提供最佳价格。例如,五个比萨的最佳价格是两个比萨(12.00美元)+三个比萨(14.00美元) 该算法还必须通过使用序列、选择和迭代结构来考虑所有可能的情况 以下是我目前的代码: 让calcOrder=()=>

我有一个练习,当
quaty
大于3时,我正在努力理解实现结果的逻辑:

用于计算促销期间将购买的比萨饼(如下所列)价格的应用程序。比萨饼的数量将由用户输入

  • 一个大比萨饼要花6.45美元
  • 两个大比萨饼要12美元
  • 三个大比萨饼要14美元
  • 四家或四家以上的比萨饼将采用上述价格的组合,以确保为客户提供最佳价格。例如,五个比萨的最佳价格是两个比萨(12.00美元)+三个比萨(14.00美元)
该算法还必须通过使用序列、选择和迭代结构来考虑所有可能的情况

以下是我目前的代码:
让calcOrder=()=>{
//获取输入
变量数量=document.getElementById(“数量”).value;
var价格=6.45;
var价格2=12.0;
var价格3=14.0;
var总价格;
//验证缺失、非数字、负输入
如果(数量=“”){
document.getElementById(“message”).innerHTML=“缺少输入”;
}否则如果(isNaN(数量)){
document.getElementById(“message”).innerHTML=“仅限数字”;
}否则如果(数量<0){
document.getElementById(“消息”).innerHTML=
“不允许使用负数”;
}否则{
//计算总数
如果(数量=1)
{
总价=价格;
}
否则如果(数量=2)
{
总价格=价格2;
}
否则如果(数量=3)
{
总价格=价格3;
}
//总产量
document.getElementById(“消息”).innerHTML=
`总价为$${totalPrice}`;
}
//阻止表格提交
返回false;
};

谢谢

您可以使用除法和模运算来计算价格:

(本例假设您所做的所有检查有效输入都已完成)

const qte=document.getElementById(“数量”).value;
常数价格=6.45;
常数价格2=12.0;
常数价格3=14.0;
让总价格;
const total3=parseInt(“+qte/3+”,10)*price3;
const total2=parseInt(“+(qte%3)/2+”,10)*price2;
const total1=parseInt(“+((qte%3)%2)+”,10)*价格;
totalPrice=total1+total2+total3;
document.getElementById(“消息”).innerHTML=
`总价为$${totalPrice}`;
代码中实际发生的情况

这是基础数学,如果你想知道你的数字中有多少个3除以3,然后取结果的整数部分或下限,基本除法。例如,10=3*3+1,那么除法的结果是3。 因为你只想把3个比萨饼的价格作为首要任务,你做这个除法,然后乘以3的价格

然后是2个比萨的价格优先权,但你对比萨的总数不感兴趣,只对你支付了3个比萨的价格后剩下的部分感兴趣,所以你使用mod运算符(%)计算3个比萨的价格,但没有支付,例如8=3*2+2,这给了我们2个比萨没有支付,所以你应用了2个比萨的价格

您检查在您支付了2个比萨后是否还剩下一个比萨(只有在您支付了3个比萨后只剩下一个比萨时才会发生这种情况)。如果有一个比萨饼,你就要付钱,否则你什么也不加

注:在以三个的倍数购买比萨后,你只需加上两个比萨或一个比萨的价格,但不能同时加上两个,否则将使用三个比萨的价格


希望解释清楚,如果不留下评论,我将尝试调整不清楚的内容。

为什么在每次计算的开始和结束时都有
parseInt(qte/3,10)
可以正常工作。或者更具描述性的
Math.floor(qte/3)
。Math.floor也可以工作,但parseInt需要字符串作为参数。@如果传递非字符串
toString()
,则会调用chawkichalladia
parseInt({toString:()=>“42”},10)/=>42
let calcOrder = () => {
  // get inputs

  var qty = document.getElementById("quantity").value;
  var price = 6.45;
  var price2 = 12.0;
  var price3 = 14.0;
  var totalPrice;

  // validate missing, non-digit, negative inputs

  if (qty == "") {
    document.getElementById("message").innerHTML = "Missing input";
  } else if (isNaN(qty)) {
    document.getElementById("message").innerHTML = "Numbers only";
  } else if (qty < 0) {
    document.getElementById("message").innerHTML =
      "Negative numbers are not allowed";
  } else {
    //calc total
    if (qty == 1) 
    {
      totalPrice = price;
    }
    else if (qty == 2)
    {
      totalPrice = price2;
    }
    else if (qty == 3)
    {
      totalPrice = price3;
    }
    //output total

    document.getElementById("message").innerHTML =
      `Total price is $${totalPrice}`;
  }

  // prevent form from submission
  return false;
};