首页 > 解决方案 > 无法找出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"); 

我本质上是试图找出这段代码中的错误,错误是当我尝试将支付总额和利息加在一起时。

标签: java

解决方案


balance是一个 int,你正试图将一个totalpaid(int) 和一个interest(double) 加在一起。你不能那样做,你必须对相同的数据类型进行操作。从理论上讲,您可以将结果转换为 int 并且错误将消失:

  balance = (int) totalpaid + interest;                                               

但不要那样做。使用intdouble处理货币不是正确的方法,因为它不准确并且可能导致浮点错误。改为使用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");
    }

推荐阅读