zoukankan      html  css  js  c++  java
  • php计算金额精度丢失问题与二维数组排序

     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

  • 相关阅读:
    CentOS 7 和centos6切换图形界面和多用户界面
    centos6.8下安装elasticsearch
    一个xib钟多个Cell
    iOS frame从导航栏下面开始
    Xcode 移除(卸载)插件
    iOS9 HTTP传输安全
    pch头文件
    真机调试---打包6plus出现问题
    Xcode 添加类前缀
    iOS 状态栏黑色背景白色字体
  • 原文地址:https://www.cnblogs.com/widgetbox/p/12168225.html
Copyright © 2011-2022 走看看