Java - 为什么我在求和 double 类型时得到这个奇怪的答案

标签 java scala jvm

为什么我会得到这个奇怪的答案?
35458.450000000004 而不是 35458.45
使用java6,7 & 8。

public static void main(String[] args) {
    double[] as = new double[]{ 1000.0, 1174.0, 1000.0, 2131.0, 240.0,
      390.0, 21524.15, 6426.5, 1272.8, 100.0, 200.0};

    double v = 0;
    for(int i = 0; i < as.length; i++) {
        v += as[i];
    }

    System.out.println(v);
}

在 Scala 中(相同):

    scala> val as = List(1000.0, 1174.0, 1000.0, 2131.0, 240.0, 390.0, 21524.15, 6426.5, 1272.8, 100.0, 200.0 );
    scala> as.sum
    res3: Double = 35458.450000000004

最佳答案

doublefloat 在转换为十进制表示形式时受内部二进制表示形式的影响。

如果您需要任意精度算术,则需要使用 BigDecimal :

Immutable, arbitrary-precision signed decimal numbers.

关于Java - 为什么我在求和 double 类型时得到这个奇怪的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38497407/

相关文章:

scala - Scala 中出现 `cannot resolve symbol` 错误的通用方法

java - Spring中的线程范围与请求范围

java - 用于连接到 Android 设备的桌面应用程序

java - 获取 Rx Java 中链式 map() 调用的倒数第二个可观察值

java - JVM 垃圾收集器中的自适应大小调整

java - 使用可维护性代理打开核心转储时出现错误 "windbg error:OpenDumpFile failed"

garbage-collection - 垃圾收集器如何知道堆栈帧上的引用?

java - List<E>.contains(Object),为什么?

scala - Scala 中仅更新单个 var 线程的类实例安全吗?

java - 如何在取消 FLINK 作业的同时关闭 ES 连接?