我在javascript中面临类似的问题,我通过乘法和divinding解决了1000.如何在Java中解决这个问题?
代码段:
double a=Double.parseDouble("1.8")/100;
System.out.println(a);
输出:
0.018000000000000002
我想要0.018作为输出。建议?
答案 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);