Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.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_Vue.js_Tax - Fatal编程技术网

Javascript 适用于加拿大的折扣和免税计算

Javascript 适用于加拿大的折扣和免税计算,javascript,vue.js,tax,Javascript,Vue.js,Tax,这个问题以前有人问过,但没有任何正确的答案。问题是我正在为加拿大客户开发POS应用程序。我陷入了税务计算,无法找到解决方案。这是我的场景,我有两个项目,比如项目1=$10和项目2=$2。第2项免税是指第2项不适用税收(13%),但在适用税收之前。我需要申请5美元的折扣。那么,如何对我的总账单应用折扣,并计算总税额 我需要折扣后的税额。税率是13% 第一项是10美元 第2项为2美元(免税) 小计为12美元 折扣是5美元 税收将是?这里有一种方法: 按价格排序,首先是最贵的 对排序列表中的项目应用折

这个问题以前有人问过,但没有任何正确的答案。问题是我正在为加拿大客户开发POS应用程序。我陷入了税务计算,无法找到解决方案。这是我的场景,我有两个项目,比如项目1=$10和项目2=$2。第2项免税是指第2项不适用税收(13%),但在适用税收之前。我需要申请5美元的折扣。那么,如何对我的总账单应用折扣,并计算总税额

我需要折扣后的税额。税率是13%

第一项是10美元 第2项为2美元(免税)

小计为12美元 折扣是5美元
税收将是?

这里有一种方法:

  • 按价格排序,首先是最贵的
  • 对排序列表中的项目应用折扣,直到没有折扣为止
  • 将该列表的价格相加以获得折扣小计
  • 将该列表中应税项目的价格相加以获得应税金额
  • 将税款应用于应税金额,并将其添加到小计中以获得总额
  • const项=[
    {价格:2.00,免税:真},
    {价格:10.00,免税:假},
    {价格:8.25,免税:假},
    ]
    常数折扣=12
    常数税=0.13
    常量applyDiscount=(项目、折扣)=>{
    // 1️⃣ 按价格排序,从最贵到最低
    items=items.slice().sort((a,b)=>b.price-a.price)
    // 2️⃣
    返回items.map(item=>{
    让价格=物品价格
    const itemDiscount=Math.min(价格、折扣)
    如果(项目折扣>0){
    价格-=项目折扣
    折扣-=项目折扣
    }
    返回{…项目,价格,原价:项目.价格,项目折扣}
    })
    }
    const itemsWithDiscount=applyDiscount(项目,折扣)
    const sumPrices=arr=>arr.map(x=>x.price).reduce((p,c)=>p+c,0)
    常量小计=总价(项目折扣)//3️⃣
    const-taxablemant=sumPrices(itemsWithDiscount.filter(x=>!x.taxExempt))/4️⃣
    const total=小计+(应纳税金额*税款)//5️⃣
    console.log('items after discount',itemsWithDiscount)
    console.log('小计:$'+小计.toFixed(2)+'(应税:$'+应课税金额.toFixed(2)+'))
    log('tax:$'+(taxablemt*tax).toFixed(2)+'('+(tax*100)+'%'))
    
    console.log('total:$'+total.toFixed(2))
    如果您可以使用折扣免费获得第2项,那么您可以对第1项应用剩余的3美元折扣,然后计算含税金额,因此在我看来是7*1.13,但可能我错了。首先,您还应该分享到目前为止您已经实现的功能。此外,这里缺少一些细节。10美元已经包含13%了吗?这些税必须在事后征收吗?您是否将所有可用价格分为含税/不含税?通常情况下,您只需自行计算每个项目(无税开始,按折扣金额(%或总额)减少每个项目,然后计算税费)。感谢您的解决方案。但我仍然对排序感到困惑。如果我们在没有排序的情况下通过检查总数来扣除折扣,以避免出现负数,就像您使用Math.min所做的那样,这会产生任何影响吗?一开始我并没有真正考虑过排序,因为我通常认为所有购物车项目都要纳税。首先将折扣应用于最昂贵的商品将最小化折扣的传播(折扣应用于多少商品)。然而,折扣应用的顺序可能会改变既有应税商品又有免税商品的购物车中的总额。让我们假设所有项目都有相同的价格。对免税项目应用折扣首先会使买方付出更多的成本,因为应纳税额会更高。另一方面,由于应税金额较低,对应税项目首先应用折扣的成本较低。在我的回答中注释掉排序,以查看不排序的演示(注意总数是如何变化的)。