java - Java BigDecimal 减法在调试器中导致零,但不会将结果应用于变量
问题描述
我有一段代码对付款进行计数,以查看是否已为房产支付租金,代码如下:
BigDecimal remainingAmount = MathUtilities.roundBigDecimal(new BigDecimal(amountDue.getAmount().doubleValue()));
for(RentPayment payment : this.rentPayments) {
remainingAmount = remainingAmount.subtract(payment.getAmountPaid().getAmount());
}
return remainingAmount;
所以在这里,所有需要发生的事情就是需要退还剩余金额,以便我们知道为特定发票支付了多少租金。当我在调试器中运行它时,它会执行 235.66 - 235.66,逻辑结果为 0:
remainingAmount.subtract(payment.getAmountPaid().getAmount());
但是,当正常运行此代码时,无论 235.66 支付多少次,结果始终是 235.66,尽管我明确设置了剩余金额。有什么我想念的吗?我看过的每个问题似乎都表明我这样做是正确的。
解决方案
问题是因为我用来验证操作结果的手表被留在里面,它覆盖了我的代码正在做的事情,这是一个简单的用户错误,关闭了这个问题。
推荐阅读
- multithreading - 对数据竞争定义的困惑
- powershell-3.0 - 将本地路径中的文件批量上传到 SharePoint Online 允许与号和磅吗?
- python - 通过参数化递归调用,使用 Python 假设生成有效的二叉搜索树
- docker - 使用 docker-compose 时忽略容器退出
- spring-boot - _csrf 始终为 NULL 并且 isAnonymous() 始终为 FALSE(部署后)
- android - Android Studio 3.2 for Windows 错误的存储库
- postgresql - Datagrip 中的多项选择(运行不在嵌套查询中的 CTE)
- ruby-on-rails - 序列化为 json 时如何包含子关联?
- java - Springboot 安全配置未重定向到 successUrl
- c# - Mongo C# Driver 2.7 - _t 鉴别器缺失