首页 > 编程语言 > 详细

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

时间:2020-01-08 21:18:01      阅读:115      评论:0      收藏:0      [点我收藏+]

 author:hann

(本文阅读预计5分钟)

一。前言:

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

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

 

二。碰到问题

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

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

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

三。解决方法

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

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

部分源码如下:

 技术分享图片

 

四.详细介绍

精度就是问题计算其实就是个理念,

着重介绍下php原装函数

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计算金额精度丢失问题与二维数组排序

原文:https://www.cnblogs.com/widgetbox/p/12168225.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!