【问题标题】:Double minus int giving unexpected results [duplicate]双减整数给出意想不到的结果[重复]
【发布时间】:2012-01-27 12:07:35
【问题描述】:

可能重复:
Floating point arithmetic not producing exact results in Java
Floating point inaccuracy examples

在 Java 中,给定以下代码:

    double amount = scan.nextDouble();

    tenBills = (int)amount / (int)10;
    amount = amount - (tenBills * 10);

    fiveBills = (int)amount / (int)5;
    amount = amount - (fiveBills * 5);

在第一次计算之后,假设输入 16 数量将等于 6.66 。但在第二次计算之后,金额将是 1.6600000000000001 。我不明白为什么从 double 中减去 int 会导致这样的结果。

【问题讨论】:

标签: java double int


【解决方案1】:

如果你想要一个硬核解释,请阅读经典的What Every Computer Scientist Should Know About Floating-Point Arithmetic。它解释了为什么浮点运算中不可避免地存在微小的舍入误差,就像您所看到的那样。

如果您只想要一个摘要:计算机以二进制表示所有内容。进行浮点运算时的二进制表示在某些情况下会导致微小的不准确。

【讨论】:

    【解决方案2】:

    从 double 中减去 int 不会只改变 double 的整数部分。它也可以改变比例。在您的特定情况下,减法(6)之前的整数部分比减法(1)之后的整数部分需要更多的位来表示。这导致数字的整个表示允许更多的小数位。结果可能(如您所见)有点出乎意料。 (双关语)

    【讨论】:

    • 多年后你的双关语得到了笑声。
    猜你喜欢
    • 2017-11-30
    • 2013-07-19
    • 2017-10-26
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    • 2019-05-19
    相关资源
    最近更新 更多