Я написал код ипотечного калькулятора, но когда я отладил его, я получил исключение - PullRequest
0 голосов
/ 27 октября 2019
import java.text.NumberFormat;

 public class Mortgage {
 public static void main(String[] args) {
    int p = 1000000;
   NumberFormat percent = NumberFormat.getPercentInstance();
   double r = Double.parseDouble(percent.format(3.92*12));

    int t = (int)(r);
    double n;
    n = Math.pow(30,12);
    int f = (int) Math.floor(n);

    int a =(1+t)^f;
    int b = (a-1);
    int c = (t*a)/b;
    int m = p*c;
    NumberFormat currency = NumberFormat.getCurrencyInstance();
    String result = currency.format(m);

    System.out.println(result);

    }
 }

Я пытался изменить r на int, но все равно получил исключение. Что я не правильно пишу?

Ответы [ 3 ]

1 голос
/ 28 октября 2019

Я вижу несколько проблем.

    double n;
    n = Math.pow(30,12);
    int f = (int) Math.floor(n);

30 до 12 степени. Это не имеет смысла для 30-летней ипотеки. Вы имели в виду 30*12 для 360 периодов выплаты. Или, возможно, Math.pow(30,1+montlyRate), где monthlyRate = (AR/100)/12 и AR = annual rate).

    int a =(1+t)^f;

Оператор ^ - это не мощность, а exclusive OR. Вы, вероятно, тоже этого не хотели.

Я рекомендую вам проверить эту вики-статью о вычислениях Mortage Payments

Вот один из способов рассчитать его и затем отобразитьв месяц.

      double in = 5.5; // annual percentage rate
      double mo_rate = (in / 100) / 12.; // monthly rate
      double PV = 400_000.; // present value (cost of the house).
      double f = Math.pow(1 + mo_rate, 360); // factor resulting from the linear
                                             // expansion

      double payment = mo_rate * PV * f / (f - 1); // Monthly payment including
                                                   // interest and
                                                   // principal

      System.out.printf("Monthly payment is %7.2f%n", payment);

Примечание: разные банки и / или страны могут делать это по-разному.

1 голос
/ 27 октября 2019

Вы используете NumberFormat.getPercentInstance() для форматирования вашего номера. При этом добавляется символ % и другое форматирование чисел (в зависимости от локали по умолчанию). Тогда вызов Double.parseDouble(...) завершится неудачно, потому что номер не является чистым двойным числом.

Нет необходимости форматировать и анализировать номер, вы можете просто присвоить его непосредственно двойной переменной, так как она в любом случае является константой. .

0 голосов
/ 27 октября 2019

Ответ в исключении java.lang.NumberFormatException: For input string: "4,704%"


  1. percent.format(3.92*12) возвращает String: 4 704 %, и это не может быть проанализировано, чтобы удвоиться, потому чтопробела и символа%, вам просто нужно умножить его на 100, чтобы считать его в процентах

    double r = 3.92 * 12 * 100;
    
  2. Поскольку вы используете только ints, вы падаетев int division problem, и в конце вы получите 0, так что вы можете использовать по крайней мере один double или один раз в течение деления

    int a = (1 + t) ^ f;
    double b = (a - 1);
    double c = (t * a) / b;
    double m = p * c;
    // OR
    int a = (1 + t) ^ f;
    int b = (a - 1);
    double c = (t * a) / (double) b;
    double m = p * c;
    
  3. Также ^ является символом XOR, для использования вычисления мощности:

    double a = Math.pow(1+t, f);
    

Результат зависит от r:

  • double r = 3.92 * 12 * 100; дает -10 308,38 €
  • double r = 3.92 * 12; дает 999 998,95 €

И используйте имена, которые объясняют, что такое переменная, насколько это возможно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...