北京地铁调价后的每个月地铁费用如何算

2014-12-28,北京地铁大调价。能够经过这个地址来查单程票价:http://piaojia.bmncc.com.cn/算法

公告文以下:spa

    北京市公共交通价格新政
    于2014年12月28日起实施
    引京发改[2014]2526号
    地铁票价: 6千米(含)内3元;6千米至12千米(含)4元;12千米至22千米(含)5元;22千米至32千米(含)6元;32千米以上部分,每增长1元可乘坐20千米。
    优惠政策: 使用市政交通一卡通刷卡乘坐轨道交通,每天然月内每张卡支出累计满100元之后的乘次,价格给予8折优惠;满150元之后的乘次,价格给予5折优惠;支出累计达到400元之后的乘次,再也不享受打折优惠。

code

其中,优惠政策的理解,容易引发误会,例如,不优惠的话,一月要花220元,那优惠后的花费是多少?blog

容易误写的算法以下,它算出的结果是月消费175元:get

function getFavorableFee(fee){
    if (fee > 400) { 
        return fee-135; //(fee-400)+265;
    } else if (fee > 150) {
        return fee/2+65; //(fee-150)/2+140;
    }else if (fee > 100) {
        return fee*0.8+20;//(fee-100)*0.8+100;
    }else {
        return fee;
    }
}

因为优惠政策上说的是“每天然月内每张卡支出累计满”150至400元时,才按50%优惠,咱们在第十六天时,卡里累计支出才140元(优惠前应该150,因为有优惠,实际只花了140元),因此仍是按80%来优惠。
即:第16日花的10元钱,是按80%优惠,而不是50%优惠。input

因此,算法须要调整一下,以下,新的结果是月消费178.75元it

function getFavorableFee2(fee){
    if (fee > 662.5) { //662.5 = 100 + 50/0.8 + 250/0.5
        return fee-262.5;
    } else if (fee > 162.5) { //162.5 = 100 + 50/0.8
        return fee/2+68.75; //(fee-162.5)/2+150;
    }else if (fee > 100) { 
        return fee*0.8+20;//(fee-100)*0.8+100;
    }else {
        return fee;
    }
}


总的示例以下:io

 

每日地铁费:
每个月按22工做日算,每个月:
优惠后每个月(理论值,仅供参考):178.75
function

相关文章
相关标签/搜索