需要一些基本的java帮助

时间:2010-12-26 20:42:33

标签: java math

我在Java书上做了第一章练习,现在我已经遇到了问题。我会打印这个问题,

  

提示/读取表示货币金额的双倍值。然后确定表示该金额所需的每个账单和硬币的最少数量,从最高开始(假设十美元钞票是所需的最大尺寸)。例如,如果输入的值是47,63(四十七美元和六十三美分),程序应该打印等量的数据:

     
      
  1. 4十美元钞票
  2.   
  3. 1五美元钞票
  4.   
  5. 2美元钞票
  6.   
  7. 2个季度
  8.   
  9. 1角钱
  10.   
  11. 0 nickels
  12.   
  13. 3便士“
  14.         

我正如他们所说的那样做一个例子以获得一个想法,正如您将在代码中看到的那样。尽管如此,我设法打印4美元,我无法弄清楚如何获得“1 5美元”,只有7美元(见代码)。

请不要为我做整个代码。关于我所说的,我只需要一些建议。谢谢。

import java.util.Scanner;

public class PP29 {
    public static void main (String[] args) {

        Scanner sc = new Scanner (System.in);

        int amount;
        double value;
        double test1;
        double quarter;

        System.out.println("Enter \"double\" value: ");
        value = sc.nextDouble();

        amount = (int) value / 10;      // 47,63 / 10 = 4. 
        int amount2 = (int) value % 10; // 47 - 40 = 7

        quarter = value * 100;          // 47,63 * 100 = 4736
        int sum = (int) quarter % 100;  // 4763 / 100 => 4763-4700 = 63.

        System.out.println(amount);
        System.out.println(amount2);
    }
}

2 个答案:

答案 0 :(得分:3)

要获得10美元钞票的结果,除以10。

现在考虑如何使用7 / 57 % 5

我还建议你不要使用双打,因为表示错误可能会给你一个不正确的结果。最好以美分执行此计算,并仅使用整数运算。 “47,63”的输入可以被视为4763美分,而10美元的账单是1000美分。

答案 1 :(得分:1)

首先,如果可能,您不应该使用浮点数进行计算。有许多棘手的细节。

对于这个问题,最好将货币值读作双精度值,然后尽快将其转换为分数。

double monetaryValue = scanner.nextDouble();
int cents = (int) (monetaryValue * 100.0 + 0.5);

int remaining = cents;
int tenDollars = remaining / 1000;
remaining %= 1000;
int fiveDollars = remaining / 500;
// TODO: continue calculation with remaining ...

我相信你会知道如何继续。