java中小数处理,bigDecimal类应用


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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM