【问题标题】:I need help making change in java. It doesnt give out change correctly我需要帮助在 java 中进行更改。它没有正确发出变化
【发布时间】:2019-10-03 06:51:02
【问题描述】:

您好,我正在尝试制定一种方法,可以为您提供数百、50、20、10、5、1 以及 25 美分硬币和 5 美分硬币的变化。用户提供输入,它应该看起来像这样:6.87 1 五 1 一 3 Quarters 1 dime 2 pennies

到目前为止,我的代码如下:

 import java.util.Scanner;

 /**
  *
  * @author Cjespinomartine
  */
 public class Assignment04 {
    public static void main(String[]args) {
        Scanner stdin = new Scanner(System.in);
        System.out.println("Enter your amount");
        double amount = stdin.nextDouble();
        double remainder = Math.round(amount * 100);

        double hundreds = remainder / 1000;
        remainder = remainder / 1000;

        double fifties = remainder / 500;
        remainder = remainder / 500;

        double twenties = remainder / 200;
        remainder = remainder % 200;
        /*
        double fives = remainder / 5;
        remainder = remainder % 5;

        double ones = remainder / 1;
        remainder = remainder % 1;

        double quarters = remainder / .25;
        remainder = remainder % .25;

        double dimes = remainder / .10;
        remainder = remainder %10;

        double nickels = remainder / .5;
        remainder = remainder % .5;

        double pennies = remainder;
         */

        System.out.println(hundreds + "hundred/s");
        System.out.println(fifties + "fiftie/s");
        System.out.println(twenties + "twentie/s");
        /*   System.out.println(fives + "five/s");
        System.out.println(ones + "one/s");
        System.out.println(quarters + "quarter/s");
        System.out.println(dimes + "dime/s");
        System.out.println(nickels + "nickel/s");
        System.out.println(pennies + "cent/s");
         */
    }
 }

它不会按顺序分发零钱,而是分发数百个。我评论了一些变化,因为我试图让数学正确。我认为如果需要,如果需要,如果需要,你能帮我弄清楚我把它放在哪里。任何帮助都将意味着很多我非常卡住谢谢。

【问题讨论】:

  • 问题一:千万不要用浮点类型来表示钱。
  • 使用行为驱动开发 (BDD) 语法表达您希望它执行的操作可能会有所帮助,请参阅 cucumber.io/docs/guides/10-minute-tutorial
  • 我将首先在列表中定义可用货币,然后循环该列表。
  • 如果您需要打印名称(例如一角钱),您可能需要地图而不是列表。
  • Math.round(double) 返回一个 long 无论如何你都想使用它:long value = Math.round(amount)

标签: java


【解决方案1】:

有一些地方出错了。

第一个问题是你对remainder 的初始处理——你乘以100,所以如果输入是1274.56,你最终会得到127456(忽略有效的浮点问题,但我会留下来专注于第一点)。 Math.round() 的输出要么是 int 要么是 long,但绝对不是 double,因此您将其存储为 double 会为自己增加混淆——相反,将结果存储为 long .从那里开始,当您计算 hundreds 时,您需要除以 10,000 而不是 1,000。此外,将其存储为int,而不是double。这就是它的样子:

long remainder = Math.round(1274.56 * 100);
int hundreds = (int) remainder / 10000;
System.out.println("hundreds: " + hundreds);

上面为hundreds 打印出“12”,这就是你想要的。

第二个问题是你如何计算remainder。您想要使用 %(模运算符)进行的先前计算中“剩余”的所有内容,并且还使用 10,000 而不是 1,000。对于hundreds 的情况,应该是这样的:

remainder = remainder % 10000;
System.out.println("remainder: " + remainder);

上面的代码会打印这个:

remainder: 7456

这应该足以让您的其余数学工作正常进行。

【讨论】:

  • 非常感谢,五十多岁我会用 500 还是 5000?
  • 如果您乘以 100,那么您使用的是便士而不是美元。 50 美元有多少便士?
【解决方案2】:

remainder = remainder / 1000; 是错误的。你想要的是在你取出所有数百个之后的剩余部分。 remainder = remainder % 1000; - 看起来注释掉的那些是正确的......

也不要使用浮点类型来赚钱。 Google 会给你一千个理由。

【讨论】:

  • 浮动类型问题的修复方法是什么?长期使用可以吗? (他们已经乘以 100,大概是为了得到以美分为单位的值)
  • 如我所说。去谷歌上查询。基本上这是因为浮点数不准确,而且钱必须是;-) long 没问题,但您可能会选择 int
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多