1、构造一个BigDecimal对象:
//创建一个BigDecimal对象,初始化必须使用字符串,因为用数值初始化会得到近似值,不准确 BigDecimal bigDecimalOne = new BigDecimal("1.232324"); //将浮点数装换成BigDecimal对象 double d = 1.3422424; BigDecimal bigDecimalTwo =BigDecimal.valueOf(d);
2、BigDecimal成员方法:
//bigDecimalOne加上bigDecimalTwo,然后返回一个新对象 bigDecimalOne.add(bigDecimalTwo); //bigDecimalOne减去bigDecimalTwo,然后返回一个新对象 bigDecimalOne.subtract(bigDecimalTwo); //bigDecimalOne乘以bigDecimalTwo,然后返回一个新对象 bigDecimalOne.multiply(bigDecimalTwo); //bigDecimalOne除以bigDecimalTwo,然后返回一个新对象 bigDecimalOne.divide(bigDecimalTwo);
3、BigDecimal对象转化成基本数据类型:
//BigDecimal对象的数值转换成对应的字符串 bigDecimalOne.toString(); //BigDecimal对返回double值 bigDecimalOne.doubleValue(); //BigDecimal对返回float bigDecimalOne.floatValue(); //BigDecimal对返回long值 bigDecimalOne.longValue(); //BigDecimal对返回int值 bigDecimalOne.intValue();
4、BigDecimal比较大小:
BigDecimal value1 = new BigDecimal("0.8"); BigDecimal value2 = new BigDecimal("2"); if (value1.compareTo(value2) == 1) { System.out.println("value1大于value2"); } if (value1.compareTo(value2) == 0) { System.out.println("value1等于value2"); } if (value1.compareTo(value2) == -1) { System.out.println("value1小于value2"); } Boolean flag = value1.compareTo(BigDecimal.ZERO) == 1 && value1.compareTo(BigDecimal.ONE) == -1; if (flag) { System.out.println("value1大于0小于1"); }
5、BigDecimal工具类:
import java.math.BigDecimal; public class BigDecimalUtil { private static final int DEF_DIV_SCALE = 10; private BigDecimalUtil(){} /** * 精准的加法运算 * @param v1 * @param v2 * @return */ public static double add(double v1,double v2){ BigDecimal b1 = BigDecimal.valueOf(v1); BigDecimal b2 = BigDecimal.valueOf(v2); return b1.add(b2).doubleValue(); } /** * 精确减法计算 * @param v1 * @param v2 * @return */ public static double sub(double v1,double v2){ BigDecimal b1 = BigDecimal.valueOf(v1); BigDecimal b2 = BigDecimal.valueOf(v2); return b1.subtract(b2).doubleValue(); } /** * 精确乘法计算 * @param v1 * @param v2 * @return */ public static double mul(double v1,double v2){ BigDecimal b1 = BigDecimal.valueOf(v1); BigDecimal b2 = BigDecimal.valueOf(v2); return b1.multiply(b2).doubleValue(); } /** * 精确除法计算 * @param v1 * @param v2 * @return */ public static double div(double v1,double v2){ BigDecimal b1 = BigDecimal.valueOf(v1); BigDecimal b2 = BigDecimal.valueOf(v2); return b1.divide(b2,DEF_DIV_SCALE,BigDecimal.ROUND_HALF_UP).doubleValue(); } public static void main(String[] args) { double d1 = 12.897; double d2 = 3.87; System.out.println(BigDecimalUtil.add(d1,d2)); System.out.println(BigDecimalUtil.sub(d1, d2)); System.out.println(BigDecimalUtil.mul(d1, d2)); System.out.println(BigDecimalUtil.div(d1, d2)); } }
6、java中舍入方式:
第一种方法:
//保留两位小数 double db = bigDecimalTwo.setScale(2, RoundingMode.HALF_UP).doubleValue(); System.out.println(db);
第二种方法:
//保留两位小数 DecimalFormat df = new DecimalFormat("#.00"); df.format(bigDecimalTwo);
7、参考:
https://www.fangzhipeng.com/java/2019/09/01/use-bigdemecial.html