商品*3(购买数量)=1块钱,拆分成三个订单
那么每个商品对应的订单金额就是0.33(程序四舍五入)
我现在把三个订单的金额加起来=0.99,这就少了0.01
我现在是和钱包一起用的,有可能出现这种情况
3个商品3块钱,我用了2块钱包
商品*3(购买数量)=1块钱,拆分成三个订单
那么每个商品对应的订单金额就是0.33(程序四舍五入)
我现在把三个订单的金额加起来=0.99,这就少了0.01
我现在是和钱包一起用的,有可能出现这种情况
3个商品3块钱,我用了2块钱包
金额平摊会有问题。子订单的金额,可能会出现负数。
建议使用百分比的方式。
例如父订单中的 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());
}
}
15 回答8.4k 阅读
7 回答5.3k 阅读
6 回答6.9k 阅读✓ 已解决
5 回答4.8k 阅读✓ 已解决
8 回答6.2k 阅读
4 回答4.4k 阅读✓ 已解决
4 回答4k 阅读
你需要一个求平均数的函数,因为 10/3 除法不尽的,我处理为最后一个数用来做微调
