这段时间一直在研究火车硬座票价算法,参考了一些网上资料:
http://bbs.hasea.com/thread-204275-1-1.html
http://wenku.baidu.com/view/d6d6d36ca98271fe910ef9e4.html
http://wenku.baidu.com/view/f21f0344336c1eb91a375d76.html
以上了了解到硬座票价的构成:
硬座票价(联合票价)=旅客票价+加快票价+空调票价+附加费
其中,旅客票价=基本票价+保险费,附加费=客票发展基金+候车室空调费+卧铺订票费
然后尝试手动计算一些非特殊区段的硬座票价,按照以上资料提供的计算方法,算出的结果总是跟实际票价有几块钱的出入
例如计算洛阳到北京西的硬座票价:
里程813KM,运价里程取800km
基本票价:11.722+27.5476+ 0.046888*(800-500)=41.6131元
保险费:41.6131*0.02=0.832262元,进整得0.9元
旅客票价:41.6131+0.9=42.5131元,四舍五入得43元
加快票:41.6131*0.4=16.64524元,四舍五入得17元
空调票:41.6131*0.25=10.403275元,四舍五入得10元
旅客票价上浮50%:43*1.5=64.5元,四舍五入得65元
加快票上浮50%:17*1.5=25.5元,四舍五入得26元
空调票上浮50%:10*1.5=15元
客票发展基金:1元
候车室空调费:1元
保险费取消后,需扣除的票价:0.9元,四舍五入到0.5元得1元
联合票价:65+26+15+1+1-1=107元
而实际票价105元,运算票价比其多2元
计算洛阳到上海的硬座票价:
里程1122KM,运价里程取1125km
基本票价:11.722+27.5476+50.9907+ 0.041027*(1125-1000)=56.119075元
保险费:56.119075*0.02=1.1223815元,进整得1.2元
旅客票价:56.119075+1.2=57.319075元,四舍五入得57元
加快票:56.119075*0.4=22.44763元,四舍五入得22元
空调票:56.119075*0.25=14.02976875元,四舍五入得14元
旅客票价上浮50%:57*1.5=85.5元,四舍五入得86元
加快票上浮50%:22*1.5=33元
空调票上浮50%:14*1.5=21元
客票发展基金:1元
候车室空调费:1元
保险费取消后,需扣除的票价:1.2元,四舍五入到0.5元得1.5元
联合票价:86+33+21+1+1-1.5=140.5元
而实际票价141.5元,运算票价与其少1元
我大致分析了一下原因:
1.关于保险费。2013年起,票价不再包含基本票价2%的保险费。由于取消保险费前,新空调票价会在旅客票价(基本票价+保险费)的基础上上浮50%、取消保险费后,是旅客票价不再包含了保险费??还是保险费继续参与50%的上浮,计算联合票价时,再扣除了四舍五入到0.5元的保险费?
2.关于四舍五入取整的顺序。基本票价算出以后,会以基本票价为准,计算加快票价、空调票价等,还会有50%的上浮。
网上看到的说法是:基本票价以小数形式(不四舍五入取整)乘以0.2(普快)/0.4(快速)后四舍五入取整数作为加快票价;基本票价以小数形式(不四舍五入取整)乘以0.25后四舍五入取整数作为空调票价。后基本票价+保险费后四舍五入取整作为旅客票价,乘以1.5后四舍五入取整,作为上浮后的旅客票价;加快票价乘以1.5后四舍五入取整数,作为上浮后的加快票价;空调票价乘以1.5后四舍五入取整数,作为上浮后的空调票价。然后三者相加,再加上附加费,构成硬座票价。不知道这个四舍五入的顺序和次数是否正确??
望大家不吝赐教 |
|