2016-04-29 9 views
0

Ich versuche die Anzahl der Nickels in meinem Programm zu runden (es gibt keine Pennies mehr). Wenn ich also 1.44 eingib, sollte es auf 1.40 runden, und wenn ich 1.46 hatte, sollte es auf 1.50 runden. Bitte helfen Sie!Programm, um die Änderung zu bekommen (Rundungshilfe)

import java.util.Scanner; 

public class MakingChange 
{ 

    private static Scanner scanner; 

    public static void main(String[] args) 

    { 
     scanner = new Scanner(System.in); 
     double amount = 0; 
     while (true) { 
      try { 
       amount = Double.parseDouble(scanner.nextLine()); 
       break; // will only get to here if input was a double 
      } catch (NumberFormatException ignore) { 
       System.out.println("INVALID\r\n$"); 
      } 
     } 

     //calculating amount of change in cents 
     int remainingAmount = (int)(amount * 100.00); 
     //toonies 
     int numberofToonies = (int) (remainingAmount/200.00); 
     remainingAmount = remainingAmount % 200; 
     //loonies 
     int numberofLoonies = (int) (remainingAmount/100.00); 
     remainingAmount = remainingAmount % 100; 
     //quarters 
     int numberofQuarters = (int)(remainingAmount/25.00); 
     remainingAmount = remainingAmount % 25; 
     //dimes  
     int numberofDimes = (int)(remainingAmount/10.00); 
     remainingAmount = remainingAmount % 10; 
     //nickels 
     int numberofNickels = (int)(remainingAmount/5.00); 
     remainingAmount = remainingAmount % 5; 
     //rounded value 
     numberofNickels=(int) (((amount -(numberofToonies * 2) - (numberofLoonies *1) - (numberofQuarters *0.25) - (numberofDimes * 0.10) - (numberofNickels * 0.05))+0.04)/0.05); 

System.out.println(".*toonies:" + numberofToonies + ";" + " loonies:" + numberofLoonies + ";" + " quarters:" + numberofQuarters + ";" + " dimes:" + numberofDimes + ";" + " nickels:" + numberofNickels +"$"); 


     } 

} 
+1

So genau, wie dieser Code nicht zu fragen? –

+0

* Sie können es US-Stil tun, wenn Sie 1,44 haben, dann erhalten Sie 1 und die Tipps Jar bekommt .44: p * Vielleicht suchen Sie nach ['Math.round'] (https://docs.oracle.com /javase/8/docs/api/java/lang/Math.html#round-double-). Beachten Sie auch, dass Sie double nicht für monetäre Zwecke verwenden sollten (verwenden Sie zum Beispiel 'BigDecimal') –

+0

Nun, anstatt mir zwei Nickels zu geben, gibt es nur einen ... die Rundung ist aus. Auch wenn ich zwei Nickel bekomme, möchte ich, dass es 1 Groschen und nicht zwei Nickel zeigt –

Antwort

2

Ich würde vorschlagen, die Anzahl von zehn, um sie herum mit Math.round(), dann teilen Sie es zurück um zehn zu multiplizieren.

d -> Math.round(d * 10)/10.0 

Angeben 10.0 statt 10 wichtig ist, da Math.round() einen long Wert zurückgibt und Sie integer Divison nicht aber Division schwimmen wollen:

1.46 * 10 = 14.6 
Math.round(14.6) = 15 
15/10 = 1.5 

1.44 * 10 = 14.4 
Math.round(14.4) = 14 
14/10 = 1.4 

Dies kann durch die folgenden Lambda umgesetzt werden.

Sie können es in Aktion auf this ideone snippet sehen.

+0

Das Schreiben dieser Logik in eine wiederverwendbare Hilfsmethode wäre eine gute Idee, z.B. 'double roundToNickel (doppelte Menge)'. – Andreas

+0

@Aaron, könnten Sie mir einen Code-Ausschnitt schicken? Ich bin unsicher, wie es aussehen würde. Warum würde ich es nicht einfach mit 0,05 multiplizieren und dann durch 0,05 dividieren –

0

Vergessen Sie nicht, Benutzer für seine Eingabe Arbeits

public class MakingChange 
{ 
    private static Scanner scanner; 

    public static void main(String[] args) { 

     scanner = new Scanner(System.in); 
     System.out.println("Insert amount:"); 
     double amount = 0; 
     while (true) { 
      try { 
       amount = Double.parseDouble(scanner.nextLine()); 
       break; // will only get to here if input was a double 
      } catch (NumberFormatException ignore) { 
       System.out.println("INVALID\r\n$"); 
      } 
     } 

     // calculating amount of change in cents 
     int remainingAmount = (int) (amount * 100.00); 
     // toonies 
     int numberofToonies = (int) (remainingAmount/200.00); 
     remainingAmount = remainingAmount % 200; 
     // loonies 
     int numberofLoonies = (int) (remainingAmount/100.00); 
     remainingAmount = remainingAmount % 100; 
     // quarters 
     int numberofQuarters = (int) (remainingAmount/25.00); 
     remainingAmount = remainingAmount % 25; 
     // dimes 
     int numberofDimes = (int) (remainingAmount/10.00); 
     remainingAmount = remainingAmount % 10; 

     // nickels 
     int numberofNickels = 0; 
     // if the remaining amount is exactly 5 cents 
     if (remainingAmount == 5) { 
      numberofNickels = 1; 
     } else if (remainingAmount > 5)// round to higher value if remaining 
             // value is greater than 5 cents e.g 
             // 20.68 
     { 
      numberofDimes += 1; 
     } 

     System.out.println(".*toonies:" + numberofToonies + ";" + " loonies:" + numberofLoonies + ";" + " quarters:" 
       + numberofQuarters + ";" + " dimes:" + numberofDimes + ";" + " nickels:" + numberofNickels + "$"); 

    } 
}