题目简介:给出年利率,贷款总额,年数,能够显示出月支付额,总共还款数;
问题:注意月支额,总支额两行,不明白,为什么括号加的位置不同,月支额应该是小数点后一位,总支额小数点后两位。明明用的(int)型强制转换,求大神解答!!package javajichu;import javax.swing.JOptionPane;
import java.math.*;
public class Computeloan {
public static void main(String[] args) {
String input1=JOptionPane.showInputDialog("请输入年利率:如8.5");
double 年利率=Double.parseDouble(input1);
double 月利率=年利率/1200;
String input2=JOptionPane.showInputDialog("请输入贷款年数:");
double 年数=Double.parseDouble(input2);
String input3=JOptionPane.showInputDialog("请输入贷款总额:");
double 贷款总额=Double.parseDouble(input3);
double 月支额=贷款总额*月利率/(1-1/Math.pow((1+月利率),年数*12));//计算出月支额
double 总支额=月支额*12*年数;
                           月支额=(int)(月支额*100/100.0);
                            总支额=(int)(总支额*100)/100.0;
        String output="总支额为:"+总支额+"\n月支额为:"+月支额;//string 定义字符串类型
        JOptionPane.showMessageDialog(null, output);
}}
基本数据类型

解决方案 »

  1.   

    月支额=(int)(月支额*100/100.0);
                                总支额=(int)(总支额*100)/100.0;
    这个是吧第一个
    等于把最后的结果(月支额*100/100.0)给转换成了int型。。而第二个,
    等于吧(总支额*100)这个转换成了int类型,然后除以100.0这个double类型所以,你明白了吧?
      

  2.   

    打错了?或者说书上印错了?请看源程序:http://www.cse.ust.hk/~liao/comp201/slides/html/ComputeLoan.html
    import javax.swing.JOptionPane;public class ComputeLoan {  /** Main method */  public static void main(String[] args) {    // Enter yearly interest rate
        String annualInterestRateString = JOptionPane.showInputDialog(      "Enter yearly interest rate, for example 8.25:");    // Convert string to double
        double annualInterestRate =      Double.parseDouble(annualInterestRateString);    // Obtain monthly interest rate
        double monthlyInterestRate = annualInterestRate / 1200;    // Enter number of years
        String numberOfYearsString = JOptionPane.showInputDialog(      "Enter number of years as an integer, \nfor example 5:");    // Convert string to int
        int numberOfYears = Integer.parseInt(numberOfYearsString);    // Enter loan amount
        String loanString = JOptionPane.showInputDialog(      "Enter loan amount, for example 120000.95:");    // Convert string to double
        double loanAmount = Double.parseDouble(loanString);    // Calculate payment
        double monthlyPayment = loanAmount * monthlyInterestRate / (1      - 1 / Math.pow(1 + monthlyInterestRate, numberOfYears * 12));    double totalPayment = monthlyPayment * numberOfYears * 12;    // Format to keep two digits after the decimal point
        monthlyPayment = (int)(monthlyPayment * 100) / 100.0;    totalPayment = (int)(totalPayment * 100) / 100.0;    // Display results
        String output = "The monthly payment is " + monthlyPayment +      "\nThe total payment is " + totalPayment;    JOptionPane.showMessageDialog(null, output);  }
      

  3.   

    百度ComputeLoan.java会搜到一大堆代码,另外《Java语言程序设计:基础篇(原书第8版)》中也有这个程序,和你提供的这个程序都有出入 所以...不必在为此纠结了
      

  4.   

    是的  double转int  应该会丢失精度的!很奇怪咋编译通过了
      

  5.   

    既然月支付已经强制转换为int型,为什么输出时,小数点后还有一位?(就是这一点不清楚……)
      

  6.   

    额额,这个就是看这本书时自己敲的代码,想不通明明已经(int)强制转换过了,为什么输出时小数点后还有一位(书上源代码:
    monthlyPayment=(int)(monthlyPayment*100)/100.0;
    totalPayment=(int)(totalPayment*100)/100/0;

    我自己将括号稍微改动了下……
      

  7.   

    额额,这个就是看这本书时自己敲的代码,想不通明明已经(int)强制转换过了,为什么输出时小数点后还有一位(书上源代码:
    monthlyPayment=(int)(monthlyPayment*100)/100.0;
    totalPayment=(int)(totalPayment*100)/100/0;

    我自己将括号稍微改动了下……
    好吧,我想多了 = =
      

  8.   

    既然月支付已经强制转换为int型,为什么输出时,小数点后还有一位?(就是这一点不清楚……)你说一个int型的数,除以一个double型的,返回的结果应该是什么形式的呢?
    既然月支付已经强制转换为int型,为什么输出时,小数点后还有一位?(就是这一点不清楚……)那是因为你定义的时候,
    定义  月支付  为double型的,
    所以即使你强转为了int型,
    由于你定义的为double型,所以最后也会转化为double型。你可以输出一下
    mouth=(int)(100.0*100/99.5);
    (100.0*100/99.5);应该返回的是一个100.5....
    但是最后输出mouth的你会发现只输出了一个100,所以证明确实被int转型过的。
      

  9.   

    大哥,英语学的不好啊……
    一开始a,b,c
    后面慢慢就可以英文单词了。。