订单拆分子订单,子订单金额相加不等于父订单金额

商品*3(购买数量)=1块钱,拆分成三个订单
那么每个商品对应的订单金额就是0.33(程序四舍五入)
我现在把三个订单的金额加起来=0.99,这就少了0.01

我现在是和钱包一起用的,有可能出现这种情况
3个商品3块钱,我用了2块钱包

阅读 3.9k
4 个回答

你需要一个求平均数的函数,因为 10/3 除法不尽的,我处理为最后一个数用来做微调
image

金额平摊会有问题。子订单的金额,可能会出现负数。

建议使用百分比的方式。

例如父订单中的 3 个子订单 A,B,C
A:100
B:200
C:400

假设有 优惠券 700 元。

如果按照均摊, A 会出现负数。

如果按照百分比则不会,例如:
A:B:C = 1:2:4

A = 700 / (1 + 2 + 4) = 100
B = 700 / (1 + 2 + 4) * 2 = 200
C = 700 / (1 + 2 + 4)* 4 = 400

根据一楼拿最后一个做微调

public static void main(String[] args)
    {
        BigDecimal walletPay = BigDecimal.valueOf(2);
        BigDecimal walletAvg = walletPay.divide(BigDecimal.valueOf(3), 2, BigDecimal.ROUND_HALF_UP);
        BigDecimal walletAvgSum = walletAvg.multiply(BigDecimal.valueOf(3));
        if(walletPay.compareTo(walletAvgSum) > 0)
        {
            System.out.println("最后一个加" + walletPay.subtract(walletAvgSum));
        }
        else if(walletPay.compareTo(walletAvgSum) < 0)
        {
            System.out.println("最后一个减" + walletPay.subtract(walletAvgSum).abs());
        }
    }

1.一般数据库存的会比显示的小数位数多1-2位
2.第三个人的金额不是除出来的,是减出来的1-1/3-1/3

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题