关于运费插件中存在的续重为整数要多算一次的问题,求高人指点。

2016-07-07 15:01 来源:www.chinab4c.com 作者:ecshop专家

申通快递本身是首重1000g 续重1000g的,相关代码如下:
  1. /**
  2. * 计算订单的配送费用的函数
  3. *
  4. * @paramfloat$goods_weight商品重量
  5. * @paramfloat$goods_amount商品金额
  6. * @paramfloat$goods_amount商品件数
  7. * @returndecimal
  8. */
  9. function calculate($goods_weight, $goods_amount, $goods_number)
  10. {
  11. if ($this->configure['free_money'] > 0 && $goods_amount >= $this->configure['free_money'])
  12. {
  13. return 0;
  14. }
  15. else
  16. {
  17. @$fee = $this->configure['base_fee'];
  18. $this->configure['fee_compute_mode'] = !empty($this->configure['fee_compute_mode']) ? $this->configure['fee_compute_mode'] : 'by_weight';

  19. if ($this->configure['fee_compute_mode'] == 'by_number')
  20. {
  21. $fee = $goods_number * $this->configure['item_fee'];
  22. }
  23. else
  24. {
  25. if ($goods_weight > 1)
  26. {
  27. $fee += (ceil(($goods_weight - 1))) * $this->configure['step_fee'];
  28. }
  29. }

  30. return $fee;
  31. }
  32. }
复制代码
我要把续重改为0.1kg经高人指点,底部计算代码改为:
  1. $fee += (ceil(($goods_weight - 1)/0.1)) * $this->configure['step_fee'];
复制代码
思路是总重量减去1kg,除以0.1,看有多少个续重。
但是我改了以后,发现很严重的问题。就是当续重为整数时,续重会多计算一次。
比如首重5元,续重1元。1.1kg的商品会算成 7元钱 1.19的商品也是7元钱。1.2kg的商品算成8元钱,1.25kg的商品也是8元钱。请高人指点,这种情况的原因和解决方法,不胜感激!