java学习---double去零和精度问题

来源:互联网 发布:码畜 知乎 编辑:程序博客网 时间:2024/05/21 15:06

之前写计算器作业的时候,偶然发现自己输入式子出现了精度问题,在小可爱的建议下,限制计算器输出的位数。

以下是解决方案:

DecimalFormat df = new DecimalFormat( ".00000000 ");

Double num = Double.parseDouble(df.format(numbers.get(unknown)));

this.result = "="+BigDecimal.valueOf(num).stripTrailingZeros().toPlainString();


备注:DecimalFormat是NumberFormat的一个具体子类,用于格式化十进制数字。括号内的表明需要的数字格式。

例如:如果输入“0.00”,就代表数字结果均为类似2.33这样的结构。

现在我写“.00000000”就是指将输出的数字的小数点后的位数限制在八位以内。


但是!!!

后来输出之后,我发现,我的所有结果都变成了。。。类似“3.50000000”的 ̄△ ̄。

然后还有一个问题需要去掉之后的0了。

根据查询,可以用java.math中的BigDecimal类中的stripTrailingZeros()方法去掉double后无意义的零。

BigDecimal 类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。)

BigDecimal类的静态方法valueOf(double)可以将double数值转换成BigDecimal,然后再调用去零方法。

toPlainString()方法可以将BigDecimal转换成不带指数的String。



0 0