2016-09-21 6 views
1

Я считаю, что у меня возникла логическая проблема с тем, как разработать раздел кода, ответственного за принятие остатка, и проверить, могу ли я извлечь изменения из отображаемых категорий изменений. Он предназначен для оценки того, сколько изменений вы должны вернуть кому-то и сделать наиболее эффективный набор изменений.Объявление о замене монеты на Java

Мой выходной ток:

The change for 328.0 Euro cents is: 
1.64 € 2 
1.28 € 1 
0.56 € 0.50 
1.4 € 0.20 
0.8 € 0.10 
1.6 € 0.05 
1.5 € 0.02 
1.0 € 0.01 

Правильный выход:

The change for 328 Euro cents is: 
1 €2 
1 €1 
0 €0.50 
1 €0.20 
0 €0.10 
1 €0.05 
1 €0.02 
1 €0.01 

Я довольно тупик, я был бы признателен за помощь, спасибо.

import java.util.Scanner; // Enables user input 

    public class Change { 
     private static Scanner scnr; 

    public static void main(String [] args) { 
      scnr = new Scanner(System.in); 
      double changeR  = 0; // User input 
      double oneCent  = 0; // Number of one cent coins 
      double twoCent  = 0; // Number of two cent coins 
      double fiveCent  = 0; // Number of five cent coins 
      double tenCent  = 0; // Number of ten cent coins 
      double twentyCent = 0; // Number of twenty cent coins 
      double fiftyCent = 0; // Number of fifty cent coins 
      double oneEUC  = 0; // Number of one Euro cent coins 
      double twoEUC  = 0; // Number of two Euro cent coins 

      System.out.println("Please enter the amount of change in Euro cents to be returned (a number between 0 & 499): "); 
      changeR = scnr.nextInt(); // Gathers user input 

      System.out.println("The change for " + changeR + " Euro cents is: "); // Outputs users inputted value 

      twoEUC = changeR/200; 
      changeR = changeR % 200; 

      oneEUC = changeR/100; 
      changeR = changeR % 100; 

      fiftyCent = changeR/50; 
      changeR = changeR % 50; 

      twentyCent = changeR/20; 
      changeR = changeR % 20; 

      tenCent = changeR/10; 
      changeR = changeR % 10; 

      fiveCent = changeR/5; 
      changeR = changeR % 5; 

      twoCent = changeR/2; 
      changeR = changeR % 2; 

      oneCent = changeR/1; 
      changeR = changeR % 1; 

      System.out.println(twoEUC + " \u20ac" + " 2"); 
      System.out.println(oneEUC + " \u20ac" + " 1"); 
      System.out.println(fiftyCent + " \u20ac" + " 0.50"); 
      System.out.println(twentyCent + " \u20ac" +" 0.20"); 
      System.out.println(tenCent + " \u20ac" +" 0.10"); 
      System.out.println(fiveCent + " \u20ac" +" 0.05"); 
      System.out.println(twoCent + " \u20ac" +" 0.02"); 
      System.out.println(oneCent + " \u20ac" +" 0.01"); 

      return; 
     } 
    } 
+1

опечатка прямо: 'ПРЕОБРАЗОВАТЕЛЪ = чейнджера/100;' – njzk2

+0

Что вы хотите, чтобы это произошло, и что происходит? – Taylor

+0

Я заметил это, оглядываясь назад, тьфу. – Aramza

ответ

1

Как обычно при работе с деньгами¹, вам нужно иметь дело только с целыми числами.

Изменение всех ваших переменных до int даст вам правильные значения, поскольку целочисленное деление будет обеспечивать, чтобы 238/200 = 1. Вместо двойного деления, которое приведет к 238.0/200.0 = 1.19.

¹ Обработка денег в коде (а также в реальной жизни) представляет собой сложную проблему. Вам нужно представить вывод в удобной для пользователя форме, поэтому вы не хотите показывать цены как 5.0001 € из-за проблемы с двойной неточностью, но вы не хотите, чтобы вычисления выполняли «нетерпеливое» округление, поэтому конечный результат отключен , Один из простейших способов - взять наименьший «атом», т. Е. Центами, и иметь дело только с ними.

Why not use double or float to represent currency

+0

Спасибо, я упустил это, я очень благодарен. – Aramza

+0

Есть много, казалось бы, простых проблем в программировании, которые на самом деле очень сложно получить на 100% правильно, потому что в большинстве случаев вы их даже не замечаете. Одной из них является валюта. – Kayaman

+0

@ Вы также можете отметить этот ответ правильно, если (предположительно) он решил вашу проблему. – Kayaman