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

 author:hann

(本文阅读预计5分钟)

一。前言:

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

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

 

二。碰到问题

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

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

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

三。解决方法

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

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

部分源码如下:

 php计算金额精度丢失问题与二维数组排序_第1张图片

 

四.详细介绍

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

这里着重介绍下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

你可能感兴趣的:(php计算金额精度丢失问题与二维数组排序)