Изменить калькулятор вычитая один - PullRequest
0 голосов
/ 03 февраля 2019

Мой калькулятор на Java не выведет правильную сумму изменений.Он вычитает одну копейку, и я не уверен, почему.

Сначала я объявил изменение как отдельные переменные, но затем просто умножил ввод пользователя на 100, но у меня все еще остается та же проблема.

//this is where the variables are declared
double penny = 0.01;
double nickel = 0.05;
double dime = 0.10;
double quarter = 0.25;
double half_dollar = 0.50;
double dollar_coin = 1.00;

double user_input = 0;

int total_penny, total_nickel, total_dime, total_quarter, 
total_half_dollar, total_dollar_coin;

Scanner in = new Scanner (System.in);

//this is where the user can input data
System.out.println("What amount would you like change for: ");
user_input = in.nextDouble();

//this is where the users data will be processed
total_dollar_coin = (int) (user_input / 1.0);
user_input = user_input % 1.00;
total_half_dollar = (int) (user_input / 0.50);
user_input = user_input % 0.50;
total_quarter = (int) (user_input / 0.25);
user_input = user_input % 0.25;
total_dime = (int) (user_input / 0.10);
user_input = user_input % 0.10;
total_nickel = (int) (user_input / 0.05);
user_input = user_input % 0.01;
total_penny = (int) (user_input / 0.01);

//this is where the information will be outputted to the user
System.out.println("Your change will be: " + total_dollar_coin + " dollar 
coin(s) ");
System.out.println(total_half_dollar + " half dollar coin(s) " + 
total_quarter 
+ " quarter(s) ");
System.out.print(total_dime + " dime(s) " + total_nickel + " nickel(s) " + 
total_penny + " penny (or pennies) ");
    }

}

1 Ответ

0 голосов
/ 03 февраля 2019

Если вы отладите это, вы увидите, что, например, 51.43 ваша последняя строка:

total_penny = (int) (user_input / 0.01);

приводит к чему-то вроде:

enter image description here

Поскольку вы преобразуетесь в int , это приведет к "неожиданному выводу", в данном случае ноль (0) - см. Ссылку, приведенную выше во втором комментарииотносительно точности.Тем не менее, возможное решение проблемы (в качестве учебного упражнения) заключается в следующем:

BigDecimal total_penny;
int total_nickel, total_dime, total_quarter, total_half_dollar, total_dollar_coin;

А затем в вашей строке total_penny:

user_input = user_input % 0.05;    --> you have 0.01 typo here
total_penny = BigDecimal.valueOf(user_input / 0.01);

Отформатируйте total_penny вывод и вывод:

String penny = NumberFormat.getInstance().format(total_penny);
System.out.println("..." + penny + " penny (or pennies) ");

Это даст вам ожидаемую сумму:

enter image description here

...