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

时间:2016-07-21 07:13:58

标签: 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

2 个答案:

答案 0 :(得分:1)

当转换为十进制表示时,

doublefloat受内部二进制表示的影响。

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

  

不可变,任意精度带符号的十进制数。

答案 1 :(得分:1)

它正在使用的类型。使用BigDecimal