简单一句话解释就是:火车票取消保险费的时候算法有点问题。
火车票票价是按照运价表来计算的,运价表大概长这样(京沪高铁早期的运价表):
需要说明的虽然网上有各种公式来计算票价,但火车票的实际最终票价都是根据运价表而不是公式,公式只是计算票价的基础而不是最终定价(比如京沪高铁的票价曾经就是取整到5元,见上图),参见:北极:高速动车组的票价怎么规定的?是按里程还是地域还是别的?
铁总宣布取消火车票里的保险费,然后就出现了问题:早年的火车票是包含保险费的,每张票大概5毛到1块的样子(更高的也有,比较少见),但这个保险费用取消了,取消以后,铁总并没有重新按照公式把整个运价表重算一下,原因不明,个人猜测可能是觉得工作量太大了。铁总直接简单粗暴的把运价表上每个票价减去0.5-1元左右的保险费。
于是票价就从:A + B = C,变成了:(A - 0.5) + (B - 0.5) < (C - 0.5),这种怪异的情况了。
比如徐州东-蚌埠南区间,票价是69.5元,但徐州东-宿州东是29.5元,宿州东-蚌埠南是39.5元,分段买比买全程少5毛钱,这种情况在其它线路上也有。
所以,原因就是取消保险费导致的。
这种算法合理不合理我不评论,但我个人觉得:更新全国所有客运线路的运价表是一个巨大的工程,同时还涉及到售票软件的更改,重算运价表的工作量和出错的概率要远远大于直接在每张票上减去一个近似值。