0.05结果显示4便士而不是1镍

时间:2019-05-04 00:59:44

标签: java

这是一个问题,希望我读取一个双精度值并确定代表该数量所需的最少数量的钞票和硬币。

我得到一个奇怪的结果。我将5.05设为moneytotal,当它应该是4镍时,我得到1便士。

我认为这是一个四舍五入的问题,但是当问题表明要使用double时,我看不到如何更改它。

        Scanner scan=new Scanner(System.in);

        double moneytotal, ten, five, one, quarters, dimes, nickels,  pennies;


        System.out.println("Input number!");
        moneytotal=scan.nextDouble();

        ten= moneytotal % 10;
        System.out.println((moneytotal -ten)/10 + " Ten Dollar 
        Bills.");

        five=ten% 5;
        System.out.println(((ten - five)/5) + " Five Dollar Bills.");

        one = five % 1;
        System.out.println((five - one) + " One Dollar Bills.");

        quarters = one % 0.25;
        System.out.println(((one - quarters)*4) + " Quarters.");

        dimes= quarters % 0.10;
        System.out.println(((quarters - dimes)*10) + " Dimes.");

        nickels=dimes % 0.05;
        System.out.println(((dimes - nickels)*20) + " Nickels.");

        pennies=nickels % 0.01;
        System.out.println(((nickels - pennies) * 100)+ " Pennies.");

实际结果:

  

输入> 5.05

5 Ten Dollar bills.
0 5 Dollar bills.
0 1 dollar bills.
0 quarters.
0 dimes.
0 nickels.
4 pennies.

1 个答案:

答案 0 :(得分:0)

将其计算为int not double,因为您可能会遇到有关更改类型的问题。 在您的代码中,monytotal % 10不是0.5,因为10是int,%对double不利。我认为结果会因语言而异。

无论如何,还有一种更完美的方法如下:

int moneytotaln = moneytotal * 100

ten= moneytotaln % 1000;
System.out.println((moneytotaln -ten)/1000 + " Ten Dollar 
Bills.");
// ...