双操作精度问题

时间:2015-10-06 07:12:58

标签: java

我在javascript中面临类似的问题,我通过乘法和divinding解决了1000.如何在Java中解决这个问题?

代码段:

double a=Double.parseDouble("1.8")/100;
System.out.println(a);

输出:

0.018000000000000002

我想要0.018作为输出。建议?

3 个答案:

答案 0 :(得分:1)

当你需要很高的精度时,最好坚持使用BigDecimal而不是使用Double。

BigDecimal可以保存任意精度和大小数字,而Double由于其表示而具有有限的精度。

缺点是BigDecimal的性能更差,代码编写更冗长(BigDecimal不能使用'+',' - '等运算符)。

答案 1 :(得分:1)

你想增加预想,还是做漂亮的印刷? 如果要打印0.018,可以使用

System.out.printf("%.3f%n",a);

%。3f表示在'。'之后打印一个3位数的浮动数字。

%n表示新行

您可以查看this german site如何使用printf。只需向下滚动列表4.30(你不需要了解德语就可以理解这个例子)

答案 2 :(得分:1)

你可以这样做:

 double a=Double.parseDouble("1.8")/100;
      DecimalFormat df=new DecimalFormat("0.000");
      String f = df.format(a); 
      try {
        double dblValue = (Double)df.parse(f) ;
        System.out.println(dblValue);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

      double dblValue2 = Math.round( a * 1000.0 ) / 1000.0;
      System.out.println(dblValue2);