有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java双操作精度问题

我在javascript中遇到了类似的问题,我通过乘以1000并预言解决了这个问题。如何用Java解决这个问题

代码段:

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

输出:

0.018000000000000002

我想要0.018作为输出。建议


共 (3) 个答案

  1. # 1 楼答案

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

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

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

  2. # 2 楼答案

    你可以做:

     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);
    
  3. # 3 楼答案

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

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

    %.3f表示打印“.”后有3位数字的浮点数

    %n表示新行

    您可以查看this german site如何使用printf。只需向下滚动查看清单4.30(理解示例不需要懂德语)