邮费计算
某 B2C 网站需要计算订单的邮寄费用,大部分情况下,邮费由包裹的总重量决定,但是,当订单的价格超过 300 美元时,提供免费付运。详细规则如下面的 mailCharge 表所示:
该表记录了各个字段在各种取值范围内时的邮费。例如,第一条记录表示,COST字段取值在 300 与 1000000 之间的时候,邮费为 0(免费付运);第二条记录表示,WEIGHT字段取值在 0 到 1(kg)之间时,邮费为 10(美元)。
下面是该网站的一些订单testOrder:
请计算这些订单的详细邮费。
分别找出资费记录中 FIELD 字段为 COST和 WEIGHT的记录,再对着整个订单记录进行循环。先判断订单记录中的 COST值是否满足免费标准,不满足则根据重量判断邮费档次。
A |
B |
|
1 |
=T("mailCharge.txt") |
=T("testOrder.txt") |
2 |
=A1.select@1(FIELD=="COST") |
=A1.select(FIELD=="WEIGHT").sort(MINVAL) |
3 |
=B1.derive(if(A2.MINVAL < COST, A2.CHARGE, B2.segp@r(MINVAL, WEIGHT).CHARGE):POSTAGE) |
A1读出邮费标准,B1读出订单数据。
A2选出免费标准的数据,由于这是单一记录,因此添加@1选项;B2选出重量计费的标准,并按重量范围升序排序:
A3在订单数据中增加邮费字段,设置时先根据COST判断是否达到优惠金额,设置对应的优惠邮费(本例中免费);否则用segp在邮费标准中找到WEIGHT所在的区间,并取得对应的邮费完成设定,由于使用的区间是左开右闭区间,因此添加了@r选项。得到最终的结果如下:
mail.Chargetxt
test.Ordertxt