通过构造方法String不会产生精度问题
BigDecimal bigDecimal = new BigDecimal("0.74101");
System.out.println("bigDecimal:"+bigDecimal);
bigDecimal:0.74101
通过构造方法Double会产生无线循环小数
Double doubleValue = new Double(0.74101);
BigDecimal bigDecimal = new BigDecimal(doubleValue);
System.out.println("bigDecimal:"+bigDecimal);
bigDecimal:0.7410099999999999464961319972644560039043426513671875
通过构造方法int不会产生精度问题
BigDecimal bigDecimal = new BigDecimal(2);
System.out.println("bigDecimal:"+bigDecimal);
通过构造方法long不会产生精度问题
Long longNum = new Long(1111111111111111111L);
BigDecimal bigDecimal = new BigDecimal(longNum);
System.out.println("bigDecimal:"+bigDecimal);
使用int或者long底层不会产生精度
计算金额或者百分比等问题
BigDecimal bigDecimal1 = new BigDecimal("0.1");
BigDecimal amount = new BigDecimal("100.05");
BigDecimal bigDecimal = bigDecimal1.multiply(new BigDecimal("100"))
.divide(amount,2,BigDecimal.ROUND_HALF_UP);
System.out.println("bigDecimal:" +bigDecimal);
如果不设置保留几位小数,则默认以最长小数为最终依据:
BigDecimal percentNum = new BigDecimal("0.1");
BigDecimal amount = new BigDecimal("100.001");
BigDecimal resultValue = amount.subtract(percentNum);
System.out.println("percentNum:"+percentNum);
System.out.println("amount:"+amount);
System.out.println("resultValue:"+resultValue);
percentNum:0.1
amount:100.001
resultValue:99.901
Double doubleValue = new Double(0.74101);
String doubleString = doubleValue.toString();
BigDecimal bigDecimalValue = BigDecimal.valueOf(doubleValue);
System.out.println("bigDecimalValue:"+bigDecimalValue);
System.out.println("doubleString:"+doubleString);