【问题标题】:Multiplication bug in java? [duplicate]java中的乘法错误? [复制]
【发布时间】:2014-07-03 04:51:47
【问题描述】:

所以,我使这行代码返回参数中值的 10%。例如,如果给出的值为 7,则代码应返回 0.7。但它返回 0.7000000000000001。有什么想法为什么?代码如下:

    public double calculateDiscount(double price){
        double discount;
        discount = price*0.10;
        return discount;
    }

我正在使用eclipse IDE,并且使用调试,我没有发现任何奇怪的东西,乘法只是返回了那个巨大的数字。

PS.:我知道我只能返回两位小数,但我想知道发生了什么。

PPS.:使用 /10 而不是 *0.10 可以正常工作。但是,正如我所说,我想知道为什么。

【问题讨论】:

  • double 和 float(几乎在任何语言中)不代表精确的浮点数,看看这个答案:stackoverflow.com/questions/6459335/…
  • 就好像某些数字不能完全精确地表示一样。奇怪的。我想知道在谷歌上搜索是否会发现以前有人遇到过这个问题.. ;)
  • 严肃的财务计算必须避免双重和浮动。并对所有其他数值数学算法保持警惕。
  • 您的第一直觉是,Java 是一个近 20 年历史的成熟编程语言,这应该是罪魁祸首吗?
  • @SotiriosDelimanolis - 这就是他们所说的“青年的智慧”。根据定义,任何比我大的东西都是错误的:-)

标签: java multiplication


【解决方案1】:

如果你真的很在意精度,可能你想使用java.math.BigDecimal

How to Use Java BigDecimal: A Tutorial 中查看更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-18
    • 2014-05-05
    • 2022-11-24
    • 2013-03-14
    • 2012-01-19
    • 2016-07-31
    相关资源
    最近更新 更多