当前位置: 首页 > 面试题库 >

Java Double值= 0.01更改为0.009999999999999787

南宫凯康
2023-03-14
问题内容

我正在为我的中学课程用Java写一个基本的命令行程序。我们现在仅使用变量。用于计算购买后找零的任何类型的纸币和硬币的数量。这是我的程序

class Assign2c {
    public static void main(String[] args) {
        double cost = 10.990;
        int paid = 20;
        double change = paid - cost;
        int five, toonie, loonies, quarter, dime, nickel, penny;

        five = (int)(change / 5.0);
        change -= five * 5.0;

        toonie = (int)(change / 2.0);
        change -= toonie * 2.0;

        loonies = (int)change;
        change -= loonies;

        quarter = (int)(change / 0.25);
        change -= quarter * 0.25;

        dime = (int)(change / 0.1);
        change -= dime * 0.1;

        nickel = (int)(change / 0.05);
        change -= nickel * 0.05;

        penny = (int)(change * 100);
        change -= penny * 0.01;

        System.out.println("$5   :" + five);
        System.out.println("$2   :" + toonie);
        System.out.println("$1   :" + loonies);
        System.out.println("$0.25:" + quarter);
        System.out.println("$0.10:" + dime);
        System.out.println("$0.05:" + nickel);
        System.out.println("$0.01:" + penny);
    }
}

它应该可以正常工作,但在最后一步还有0.01美元的余款时,便士数应该为1,而应为0。进入代码并将更改值输出到控制台几分钟后,我发现在change =0.01的最后一步,它将更改为0.009999999999999787。为什么会这样呢?


问题答案:

使用double货币不是一个好主意,为什么不使用Double或Float代表货币?。我建议BigDecimal以美分使用或进行所有计算。



 类似资料:
  • 我需要在我的mysql数据库中的表中更改列,以便列中当前为true的值更改为false,之前为false的值更改为true。 那么,在:值A:假值B:真之前 之后:值A:真值B:假 我该怎么做?试图为此编写一个液化迁移。我首先想到的是: 更新表设置列A=false,其中列A=true,设置列A=true,其中列A=false; 但我意识到,如果我首先将真值更改为假,那么所有值都将为假,然后MySQ

  • 问题内容: 我希望在用户更改文本字段中的值后立即显示消息框。目前,我需要按Enter键才能弹出消息框。我的代码有什么问题吗? 任何帮助,将不胜感激! 问题答案: 将侦听器添加到为你自动创建的基础文档中。

  • 问题内容: 为什么ColdFusion中的数学运算似乎不受浮点数学问题的影响?拿代码: 哪个输出 0.07 java.lang.Double 但是,当将两个double相加时,equivlant Java代码会产生预期的效果: 由于浮动数学的现实性,这是我期望从ColdFusion中看到的内容(http://download.oracle.com/docs/cd/E19957-01/806-356

  • 我是Hadoop和编写MapReduce作业的新手,我遇到了一个问题,似乎reducers context.write方法正在将正确的值改为不正确的值。 计数字数总数 计算不同字的数目 计数以“Z”或“Z”开头的字数 计算出现次数少于4次的单词数 所有这些都必须在单个MapReduce作业中完成。 正在分析的文本文件 Stdout日志,我正在使用它进行调试 从日志中可以看出,所有的值都是正确的,而

  • 如果我想将一个名为“maximum_num”的新列突变到x上,其值为5.1,4.9,4.7等,我该怎么做?(我意识到糟糕的例子,因为这里都是Sepal.Length,但如果最大值每次来自不同的cols) 我想我可以用which.max但不知道如何编织。 我也试过 如何追加包含最大行值的新列? 有dplyr esque的方式吗?对base r也很满意。

  • 问题内容: 尝试更改列的数据类型并设置新的默认值时遇到以下错误: 错误1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以在第1行的’VARCHAR(255)NOT NULL SET DEFAULT’{}’‘附近使用正确的语法 问题答案: 同样的第二种可能性(感谢juergen_d):