java - 爪哇。计算正确的变化
问题描述
我写了一个代码来计算零钱(美元钞票的数量,一角硬币,便士......)。只有“便士”工作,但不是它应该的方式,所有其余的代码行都没有响应。
public BigDecimal deposit() {
String money = io.readString("Please, deposit money");
BigDecimal deposit = new BigDecimal(money);
return deposit;
}
public void change(String itemId) throws VendingMachinePersistenceException {
Change change = new Change();
Item item = dao.getItem(itemId);\\this line works
BigDecimal change1 = deposit().subtract(item.getPrice());\\this line works
int changeBack = change1.intValue();
io.print("Your change is : ");
change = change.remainder(new BigDecimal("100"));
if (changeBack/100 != 0) {
change.setDollars(changeBack/100);
changeBack = changeBack%100;
io.print(change.getDollars() + " dollars, ");
}
if (changeBack/25 != 0) {
change.setQuarters(changeBack/25);
changeBack = changeBack%25;
io.print(change.getQuarters() + " quarters, ");
}
if (changeBack/10 != 0) {
change.setDimes(changeBack/10);
changeBack = changeBack%10;
io.print(change.getDimes()+ " dimes, ");
}
if (changeBack/5!= 0) {
change.setNickels(changeBack/5);
changeBack = changeBack%5;
io.print(change.getNickels() + " nickels, ");
}
change.setPennies(changeBack);
io.print(change.getPennies()+ " pennies.");
}
这可能是 if 语句或将 BigDecimal 转换为 Int 的问题。我不确定。请帮忙!
解决方案
由于您使用 BigDecimal 来赚钱,因此 change1 的值可能类似于 5.21
将其转换为 int 只会让您获得 5 的 changeBack,从而获得 5 分的零钱。
因此,您可能希望将 BigDecimal 乘以 100,然后再将其转换为 int。
推荐阅读
- amazon-web-services - AWS emr 驱动程序 jar
- c++ - 如何使用 C++ 从文件中输入表情符号?
- flutter - 在测试 Web 集成时,如何让“flutter drive”显示浏览器?
- sql - LEFT JOIN 正在杀死我的查询 - 如何加快速度?
- ruby-on-rails - Rails - 如何向 Fastjson api 添加分页?
- amazon-web-services - 使用 Terraform 更改 hash_key 会导致表已存在错误
- c# - 相机不与播放器一起旋转 360 度视频录制中的播放器统一
- azure-cosmosdb - 即使 maxItemCount 设置为 -1,Cosmos Db 也不会返回所有记录
- javascript - 无法制作四种不同颜色的轮子
- office-js - Excel 加载项 | 根据条件启用/禁用功能区图标