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