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/

相关文章:

java - 如何处理包含加号(+)运算符的时间戳字符串

scala - 如何覆盖 awsglue 作业中的 couchbase 查询超时?

scala - 从 HList 中获取元素

java - 在 Java 中计算可用内存的最佳方法是什么?

java - SSL 握手异常 : Remote host closed connection during handshake

java.lang.ExceptionInInitializerError logic.HibernateUtil.<clinit>(HibernateUtil.java :16)

java - 臭名昭著的三角环……有点扭曲

scala - Spark 结构化流 未授权访问组

java - 如何使 JVM 崩溃?

java - JVM 如何以及在何处处理键盘敲击?