关于BigDecimal的构造函数与大小比较

时间:2013-09-28 08:23:33
【文件属性】:
文件名称:关于BigDecimal的构造函数与大小比较
文件大小:18KB
文件格式:XLS
更新时间:2013-09-28 08:23:33
关于BigDecimal的构造函数与大小比较 java 代码 BigDecimal b1=new BigDecimal("1.0"); BigDecimal b2=new BigDecimal("1.00"); boolean t=b1.equals(b2); 怎么样,你认为t是true还是false?它还真是false。BigDecimal的大小比较,1.0与1.00是不相等的,得采用它自带的compareTo方法: java 代码 int i=b1.compareTo(b2) 这一次,返回的i可能为-1、0、1,分别表示小于、等于、大于 构造函数:解决了上面这个问题好像万事大吉了,结果,我在做测试的时候,又发现了一个莫名其妙的问题,代码如下: BigDecimal bd=supplierRecentProductDao.findHistoryReturnRate("001", "001"); assertEquals(bd.compareTo(new BigDecimal(0.15)),0); 计算得到的bd值就是0.15,但是测试它偏偏告诉我: java 代码 junit.framework.AssertionFailedError: System.out.println("HistoryReturnRate:"+bd+","+new BigDecimal(0.15)); 发现结果是这样的: java 代码 HistoryReturnRate:0.150000,0.1499999999999999944488848768742172978818416595458984375 我们的 new BigDecimal(0.15)得到了一个超接近的数“0.1499999999999999944488848768742172978818416595458984375”,但它就是小于0.15。上网查得,BigDecimal有三种构造方式: java 代码 BigDecimal(Stirng s), BigDecimal(int i,int k), BigDecimal(double d) ,由于浮点运算的原因,要慎用第三种方式,否则就会得到上面的结果。所以,改用 java 代码 assertEquals(bd.compareTo(new BigDecimal("0.15")),0); 之后,测试顺利通过了。

网友评论