• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

php计算金额精度丢失问题与二维数组排序

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 author:hann

(本文阅读预计5分钟)

一。前言:

  最近公司项目引入了采购金返利活动,使用采购金和返还采购金同时开始,业务规则交错,所以每一笔钱的错位都会导致后续业务计算错误。

【保证精度与计算的正确性】,很重要。

 

二。碰到问题

  开发时发现异常现象,在百分比计算返利时,有时候会多出1分钱问题,偶发。

  原因1 : 因为在单订单多商品的每个商品乘法计算四舍五入,最后累加就会有出入。

  原因2 : 由于业务形态为不一定所有商品参加返利,剔除逻辑与二维商品数组排序有关

三。解决方法

  1. 计算最后一个商品使用减法,而非乘法,即:最后一个额度 = 总额 - 已计算额度,这样永远不会精度丢失超发或少发

  2. php巧妙的二维数组按指定字段排序算法,array_multisort,两行代码搞定一个复杂排序逻辑

部分源码如下:

 

 

四.详细介绍

防止精度丢失其实就是一个运算理念,

这里着重介绍下php原装spl函数,以前小瞧它了

array_multisort();
$sort_purchase_rebate_price_arr = array_column($order_product_lists,'purchase_rebate_price');
array_multisort($sort_purchase_rebate_price_arr,SORT_ASC,$order_product_lists);

这个函数很强大,既可以计算一位数组的排序,也可以计算二维数组的排序

而且感觉百度百科介绍的比官方文档容易懂,另眼相看呀。

 

五.参考链接:

官方文档:https://php.net/manual/en/function.array-multisort.php

百度百科:https://baike.baidu.com/item/array_multisort/9038626?fr=aladdin


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
phpSESSION入库的实现发布时间:2022-07-10
下一篇:
PHP统计当前在线用户数实例发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap