繁体   English   中英

用Java计算交易费用

[英]Calculating transaction fees in Java

假设您拥有一个可以让每个用户保持平衡的网站。 您可以给每个用户选择从PayPal,Amazon FPS,Authorize.NET eCheck和信用卡(可能只有几次)中存入其余额的资金。

上述每个公司都收费。 并且由于您是接收方,您需要负责费用(除了Adaptive PayPal API之外,您可以说谁将支付费用)。

因此,假设网站用户(发送者)将向您存入$ 1000.00,并让2.9%的选择器费用加上$ 0.30的固定费用=-$ 29.30,那么接收者(网站所有者)最终将获得$ 970.70

如果您尝试收取$ 1029.30,则最终会获得$ 999.1503如果您尝试收取$ 1031.11,则最终会导致获得$ 1000.90781,这是可以接受的(这是将费用增加0.181%至3.081%+ 0.30)

所以这个问题是,用Java方法计算0.181%的最佳方法是什么

我知道这比Java问题更多的是数学问题,但是什么是猜测最佳费用百分比的最佳算法,因此最终价值将尽可能接近网站用户尝试存入的最终价值。

因此,该方法应采用实际费用的2.9%(乘以0.029),固定费用为用户尝试存入的金额的0.30,并确定最终收取的金额应尽可能接近存款金额。

我一直在尝试增加2.9%,直到扣除费用后我的税率略高。

UPDATE

根据下面的答案,我编写了此方法。 我们欢迎任何进一步的建议:

public static float includeFees(float percentageFee, float fixedFee, float amount) {
    BigDecimal amountBD = new BigDecimal(amount);
    BigDecimal percentageFeeBD = new BigDecimal(1-percentageFee);
    BigDecimal fixedFeeBD = new BigDecimal(fixedFee);

    return amountBD.add(fixedFeeBD).divide(percentageFeeBD, 10, BigDecimal.ROUND_UP)
            .setScale(2, BigDecimal.ROUND_UP).floatValue();
}

每当您要花钱时,都需要使用精度数据类型而不是浮点数学。 通常,在处理诸如营业税之类的事情时,有关于如何处理问题的规则。

BigDecimal具有可以设置为控制舍入行为的参数,这些舍入行为可能会将您带到需要去的地方。 在这种情况下,数学永远不会精确到一分钱的几分之一,但是您应该能够保证您收取的费用永远不会超过一分钱。

amt_you_receive = amt_customer_pays - .029 * amt_customer_pays - .30
amt_you_receive + .30 = amt_customer_pays * (1 - .029)
(amt_you_receive + .30) / .971 = amt_customer_pays

因此,取您要获得的金额,加上30美分,然后除以.971(也就是乘以约1.029866)即可获得您应该收取的金额。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM