2016-09-21 79 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

由於在處理money¹時很常見,所以只需要處理整數。

將所有變量更改爲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

@Andrew你也可以標記這個答案是正確的,如果(推測)它解決了你的問題。 – Kayaman