java - 无法找出Java中伪代码转换的数据
问题描述
int month = 1;
int balance = 500;
int totalpaid = 0;
double interest;
while (balance > 100);
{
balance = balance - 100;
interest = (balance * 0.1);
balance = totalpaid + interest;
totalpaid = totalpaid + 100;
month = month + 1;
}
System.out.println ("you paid" + "," + totalpaid);
System.out.println ("it took you" + "," + month + "months");
我本质上是试图找出这段代码中的错误,错误是当我尝试将支付总额和利息加在一起时。
解决方案
balance
是一个 int,你正试图将一个totalpaid
(int) 和一个interest
(double) 加在一起。你不能那样做,你必须对相同的数据类型进行操作。从理论上讲,您可以将结果转换为 int 并且错误将消失:
balance = (int) totalpaid + interest;
但不要那样做。使用int
和double
处理货币不是正确的方法,因为它不准确并且可能导致浮点错误。改为使用BigDecimal
。
public static void main(String[] args) {
int month = 1;
BigDecimal balance = BigDecimal.valueOf(500);
BigDecimal totalpaid = BigDecimal.valueOf(0);
BigDecimal interest;
while (balance.compareTo(BigDecimal.valueOf(100)) > 0)
{
balance = balance.subtract(BigDecimal.valueOf(100));
interest = (balance.multiply(BigDecimal.valueOf(0.1)));
balance = (totalpaid.add(interest));
totalpaid = totalpaid.add(BigDecimal.valueOf(100));
month = month + 1;
}
System.out.println ("you paid" + "," + totalpaid.toString());
System.out.println ("it took you" + "," + month + "months");
}
推荐阅读
- java - 单选按钮组获取表的值
- python - 为什么我不能在 wxPython 中绘制两个不同的位图?
- javascript - 带有 Webpack 5 的影子 DOM 中的 CSS
- react-native - 使用本机反应创建计时器
- ethereum - 以太坊合约可以直接在比特币上执行交易吗?
- algorithm - 这是分类问题还是回归问题?什么算法可以用来解决它?
- android - 如何将从 firebase 检索到的数据保存到 arraylist
- python - 熊猫总和然后除以唯一计数
- jupyter-notebook - 将 nbextensions 与 Jupyter Server 一起使用的正确方法是什么(WinPython 3.8.8)
- java - 将对象列表转换为地图
使用地图/流/收集