保留特定位数的小数并不一定能完全解决精度丢失问题,因为在计算机中,小数都是以二进制表示的,而许多十进制分数在转换为二进制时会变成无限循环小数,从而导致精度丢失。可以采用BigDecimal类来解决精度丢失问题。示例代码如下:
import java.math.BigDecimal;
public class BigDecimalDemo {
public static void main(String[] args) {
double d1 = 0.1;
double d2 = 0.2;
double result1 = d1 + d2;
System.out.println("double计算结果:" + result1);
BigDecimal bd1 = new BigDecimal("0.1");
BigDecimal bd2 = new BigDecimal("0.2");
BigDecimal result2 = bd1.add(bd2);
System.out.println("BigDecimal计算结果:" + result2.toString());
}
}
输出结果为:
double计算结果:0.30000000000000004
BigDecimal计算结果:0.3
可以看到,使用double类型进行计算会出现精度丢失的问题,而使用BigDecimal类可以获得精确的计算结果。但是,在实际使用中要注意BigDecimal构造函数中的字符串形式参数要谨慎转换,避免精度丢失。
上一篇:保留两位小数后移除零