gpt4 book ai didi

java - 项目行中未分配的金额

转载 作者:太空宇宙 更新时间:2023-11-04 13:51:12 25 4
gpt4 key购买 nike

我有一个关于如何将给定金额分配给项目行的问题。基本我有这种简单的代码。如何调节每个行项目,以便在支付金额足够的情况下余额为零。如果没有,最后一项将有余额需要支付。对此有什么建议或好的算法吗?谢谢。输出在评论中。

public static void main(String[] args) {
BigDecimal paidAmount = BigDecimal.valueOf(200);
List<Item> items = initializeItems();
calculateItemBalanceAmount(paidAmount, items);
displayItems(items);
}

private static void calculateItemBalanceAmount(BigDecimal paidAmount, List<Item> items) {
for (Item item : items) {
if (paidAmount.compareTo(item.getTotalOwed()) > 0) {
item.setTotalPaid(item.getTotalOwed());
item.setBalance(item.getTotalOwed().subtract(item.getTotalPaid()));
} else {
item.setTotalPaid(paidAmount);
item.setBalance(paidAmount.subtract(item.getTotalOwed()));
break; // Ugly
}
}
}

protected static List<Item> initializeItems() {
List<Item> items = new ArrayList<>();
Item item = new Item(BigDecimal.valueOf(1000));
items.add(item);
item = new Item(BigDecimal.valueOf(1000));
items.add(item);
item = new Item(BigDecimal.valueOf(1000));
items.add(item);
return items;
}

protected static void displayItems(List<Item> items) {
System.out.print(StringUtils.rightPad("Total Owed", 15));
System.out.print(StringUtils.rightPad("Paid", 15));
System.out.print(StringUtils.rightPad("Balance to be paid", 15));
System.out.println();
for (Item i : items) {
System.out.print(StringUtils.rightPad(i.getTotalOwed().toString(), 15));
System.out.print(StringUtils.rightPad(i.getTotalPaid().toString(), 15));
System.out.print(StringUtils.rightPad(i.getBalance().toString(), 15));
System.out.println();
}
}

private static class Item {
private BigDecimal totalOwed = BigDecimal.ZERO;
private BigDecimal totalPaid = BigDecimal.ZERO;
private BigDecimal balance = BigDecimal.ZERO;

public Item(BigDecimal totalOwed) {
this.totalOwed = totalOwed;
}

public BigDecimal getTotalOwed() {
return totalOwed;
}

public void setTotalOwed(BigDecimal totalAmount) {
this.totalOwed = totalAmount;
}

public BigDecimal getBalance() {
return balance;
}

public void setBalance(BigDecimal balance) {
this.balance = balance;
}

public BigDecimal getTotalPaid() {
return totalPaid;
}

public void setTotalPaid(BigDecimal totalPaid) {
this.totalPaid = totalPaid;
}
}

最佳答案

如果我理解您的问题,那么您希望用户必须支付剩余余额。

因此,在您的代码中,您将获得剩余的用户帐户中有多少钱。当我运行你的代码时,我得到的负余数为 -200。

如果我查看 Balance 中的预期值,即 200。基本上,您只希望如果余数为负数,则剩余的金额将作为余额。

for循环之后,您可以添加以下代码。

BigDecimal balance = BigDecimal.valueOf(0);;
if (remainder.signum() == -1) {
balance = remainder.negate();
System.out.println("Balance : " + balance);
}

关于java - 项目行中未分配的金额,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30251839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com