最近在看银行家算法的时候发现原博文中用的BigDecimal 有问题,所以总结了BigDecimal 失真问题,自己也总结了几种经常用的转换方式,并且列出来,以防以后忘记,代码如下
double db = 211288.555;
String str = "211288.555";
BigDecimal rw = BigDecimal.valueOf(db);// 不失真
BigDecimal rw2 = new BigDecimal(db);// 这种用法会失真,要小心
BigDecimal rw3 = new BigDecimal(str);// 不失真
BigDecimal rw4 = new BigDecimal(Double.valueOf(db));// 这种用法会失真,要小心
System.out.println("rw==" + rw);
System.out.println("rw2==" + rw2);
System.out.println("rw3==" + rw3);
System.out.println("rw4==" + rw4);