有没有一种方法可以总结java

时间:2019-08-10 13:39:10

标签: java

我一直在尝试使用Java中的double求和十进制值,但效果不佳,答案错误。

我已经尝试过使用Double,Float和BigDecimal。

{
    double a = 2595.00;
    double b = -1760.76;
    double c = -834.00;
    double d = -.24;

    System.out.print(a+b+c+d);
}

预期结果应为“ 0”,但获得9.1038288019262836314737796783447265625E-15

2 个答案:

答案 0 :(得分:3)

您可以为此目的使用BigDecimal,并确保在String构造函数中将数字输入为BigDecimal

 BigDecimal a = new BigDecimal("2595.00");
 BigDecimal b = new BigDecimal("-1760.76");
 BigDecimal c = new BigDecimal("-834.00");
 BigDecimal d = new BigDecimal("-.24");

 System.out.println(a.add(b).add(c).add(d));

Live Example

输出为:

0.00

Java docsBigDecimal(String)

  

通常,这是将float或double转换为   BigDecimal,因为它不会遭受   BigDecimal(double)构造函数。

请检查此SO thread,以了解为什么double会导致精度下降。

答案 1 :(得分:0)

正如先前有关双精度的答案所指出的,此处的值非常接近零。您也可以通过System.out.format看到它。

System.out.format("%.14f%n",a+b+c+d);
System.out.format("%1.1f%n",a+b+c+d); //to print 0.0