Java-为什么我';我得到了这个奇怪的答案
为什么我会得到这个奇怪的答案?Java-为什么我';我得到了这个奇怪的答案,java,scala,jvm,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
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);
}
double
和float
在转换为十进制表示时受内部二进制表示的影响
如果需要任意精度的算法,则需要使用:
不可变,任意精度有符号十进制数
double
和float
在转换为十进制表示时受内部二进制表示的影响
如果需要任意精度的算法,则需要使用:
不可变,任意精度有符号十进制数
这是您正在使用的类型。使用
BigDecimal
这是您正在使用的类型。使用<代码> BigDecimal < /代码> <代码>双< /代码>不是无限的,如果需要Peles小数计算考虑选择<代码> BigDecimal <代码>类,而不是<代码>双< /代码>刚刚读取。这个精确的问题大约被问了一百万次。请至少在发布一个问题之前先进行一次搜索。参见:<代码>双< /代码>并不是无限的,如果你需要Peles小数计算考虑选择<代码> BigDecimal <代码>类,而不是<代码>双< /代码>刚刚阅读。这个精确的问题大约被问了一百万次。在发布问题之前,请至少先进行搜索。另请参阅:和。
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