- 实例化注意的地方
阿里巴巴Java开发手册泰山版描述有如下描述
为什么呢,举个例子@Test public void equals3(){ double a = 1.22222d; BigDecimal bigDecimal1 = new BigDecimal(a); BigDecimal bigDecimal2 = new BigDecimal(String.valueOf(a)); System.out.println("构造方法BigDecimal(double)方式把double值转换为BigDecimal对象:"+bigDecimal1); System.out.println("构造方法BigDecimal(String)方式把double值转换为BigDecimal对象:"+bigDecimal2); }
得到的结果是
可见,使用BigDecimal(double)存在精度损失的风险;
因此,应该实例化先将变量转换为String类型,再通过构造方法转换为double
- 两个BIgDecimal类型的数据比较
!!!需要注意的地方,将BigDecimal类型转换为String类型,再使用equals()比较存在的问题- 当比较两个数 2.3 和 2.30 时,得出的结果时不相等的;也即,比较0和0.00时,得到的结果也是不相等的;所以,不能转换为String类型进行比较
举个例子
//转换为String比较
@Test
public void equals2(){
BigDecimal bigDecimal1 = new BigDecimal(2.3);
BigDecimal bigDecimal2 = new BigDecimal(2.4);
BigDecimal bigDecimal3 = new BigDecimal(2.30);
System.out.println("bigDecimal类型使用compareTo()比较......"+(bigDecimal1.compareTo(bigDecimal2) == 0));
System.out.println("bigDecimal类型使用compareTo()比较......"+(bigDecimal1.compareTo(bigDecimal3) == 0));
System.out.println("=========2.3 和 2.30 比较===========");
String b1 = "2.3";
String b2 = "2.30";
BigDecimal b11 = new BigDecimal(b1);
BigDecimal b21 = new BigDecimal(b2);
System.out.println("bigDecimal类型转换为equals比较......"+(String.valueOf(b11).equals(b21)));
}
得到的结果是
可见,应该使用compareTo()比较
A.compareTo(B) == 0 //表示 A和B相等 A.compareTo(B) == 1 //表示 A大于B A.compareTo(B) == -1 //表示 A小于B
以上写法也有需要注意的地方,A和B需要分别校验是否为空,否则会报空指针异常;



