2016-09-21 15 views
1

나는 나머지 부분을 담당하는 코드 섹션을 개발하고 표시된 변경 범주에서 변경 사항을 추출 할 수 있는지 확인하는 방법에 대해 논리적 인 문제가 있다고 생각합니다. 그것은 누군가에게 얼마나 많은 변화가 있는지에 대한 가치를 취하고 가장 효율적인 변화를주기 위해 고안되었습니다.자바 유로화 변경 명칭

내 전류 출력 :

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이 될 것이므로 적절한 값을 제공합니다. double division 대신에 238.0/200.0 = 1.19이됩니다.

¹ 실제 생활과 마찬가지로 코드에서 돈을 다루는 것은 어려운 문제입니다. 출력물을 사용자가 읽을 수있는 형식으로 제시해야하므로 이중 부정확성 문제로 인해 가격을 5.0001 €으로 표시하고 싶지는 않지만 계산 결과가 "열의있는"반올림을하여 최종 결과가 꺼지게하고 싶지는 않습니다 . 가장 간단한 방법 중 하나는 가장 작은 "원자"즉 센트를 가져 와서 거래하는 것입니다.

Why not use double or float to represent currency

+0

감사합니다. 나는 이것을 간과했습니다. 크게 감사드립니다. – Aramza

+0

프로그래밍에서 겉으로보기에는 단순한 문제가 많이 있습니다. 대부분 100 % 정확도를 얻는 것이 실제로 어렵습니다. 대부분의 경우 사용자가주의를 기울이지 않기 때문입니다. 통화가 그 중 하나입니다. – Kayaman

+0

@Andrew이 답변을 올바른 것으로 표시 할 수도 있습니다 (아마도) 문제가 해결 된 경우입니다. – Kayaman