2012-02-08 4 views
1

Я пытаюсь написать программу для школы, используя класс BigDecimal. Программа представляет собой калькулятор процентной ставки и и окончательный вывод должен быть somethig как:BigDecimal Class Java

Loan Amount: whatever loan amount is in dollars 
    Interest Rate: as a percent 
    Interest: amount of interest paid in dollars 
    continue? Y/N: 

Книга не ясно, о том, как кодировать класс BigDecimal, и я использую Eclipse, так что в любое время я внести изменения Я получаю ошибку, которая запутывает. Может ли кто-нибудь взглянуть на это и установить меня в правильном направлении? Я использую Java SE6 от Мураха, и книга просто не очень полезна.

Спасибо!

import java.util.Scanner;   //import scanner 
    import java.text.NumberFormat;  //import number format 
    import java.math.*;     //import math classes 


    public class InterestCalculator  //create public class 
    { 

     public static void main(String[] args) 
      { 
      Scanner calc = new Scanner(System.in); //create scanner 
      double LoanAmount, InterestRate, Interest; //declareLoanAmount,InterestRate, and Interest as double 

      //welcome user to the Interest Rate Calculator 
      System.out.println("Welcome to The Interest Rate Calculator"); 
      System.out.println(); 
      //perform choice calculations until choice isn't equal to "y" or "Y" 
      String choice = "y";  
      while (choice.equalsIgnoreCase("y")) 
       { 

       //Get Loan Amount from user 
       System.out.println("Enter Loan Amount: "); 
       LoanAmount = calc.nextDouble(); 

       //Get Interest rate from user 
       System.out.println("Enter Interest Rate: "); 
       InterestRate = calc.nextDouble(); 

       BigDecimal decimalInterest = new BigDecimal(Double.toString(Interest)); 
       decimalInterest = decimalInterest.setScale(2, RoundingMode.HALF_UP); 
       BigDecimal decimalInterestRate = new BigDecimal(Double.toString(InterestRate)); 
       decimalInterestRate = decimalInterestRate.setScale(2, RoundingMode.HALF_UP); 

       //calculate interest 



       System.out.println("message"); 


       //prompt user to continue? 
       System.out.println("Continue? Y/N: "); 
       choice = calc.next(); 
       System.out.println(); 



       } 


     } 

    } 
+0

У меня также возникла проблема с кодированием вычисления, которое должно быть чем-то вроде Interest = LoanAmount * InterestRate, и я знаю, что моя печать внизу просто напечатает слово «Сообщение». В моей предыдущей попытке я пытался написать строку, которая будет печатать весь мой вывод, и я назвал строковое сообщение. –

+3

какая ошибка вы получаете? – Kris

+0

Я предлагаю вам взглянуть на [BigDecimal javadoc] (http://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigDecimal.html) - он довольно всеобъемлющий. В общем, «BigDecimal» неизменен, поэтому каждый раз, когда вы выполняете операцию, вы получаете новый экземпляр. Например: BigDecimal someValue = decimalInterest.multiply (decimalInterestRate); 'Кроме того, вам не нужны строковые преобразования, такие как' Double.toString (Interest) '-' BigDecimal' ctor принимает двойники, а что нет (посмотрите javadoc!) –

ответ

2

Ваша проблема связана с этой точки

BigDecimal decimalInterest = new BigDecimal(Double.toString(Interest)); 

Переменная ставка не initalized в этой точке.

Что-то, как это должно сделать работу (однако я не улучшить свой стиль кодирования):

 BigDecimal decimalInterestRate = new BigDecimal(Double.toString(InterestRate)); 
     decimalInterestRate = decimalInterestRate.setScale(2, RoundingMode.HALF_UP); 
     BigDecimal decimalLoanAmount = new BigDecimal(Double.toString(LoanAmount)); 
     decimalLoanAmount = decimalLoanAmount.setScale(2, RoundingMode.HALF_UP); 

     // calculate interest 
     BigDecimal Interest = decimalInterestRate.multiply(decimalLoanAmount); 

     System.out.println("Interest:" + Interest); 

P.S. вам нужно удалить объявление Interest в самом начале вашего основного метода.

+0

Я приговариваю к своему невежеству. не могли бы вы уточнить, что мне нужно сделать, чтобы инициализировать это? –

+0

@JeremyBorton я добавил пример. – fyr

+0

Спасибо! Я должен уметь кодировать остальную часть моего вывода, используя правильную коррекцию NumberFormat? –