首页 > 技术文章 > BigDecimal方法的应用

honour1207 2021-04-06 16:09 原文

一.简介

BigDecimal 在 MySQL中为 decimal ,这个也是可以存储小数点的数值,相比较于 double来说,decimal的精度更加的准确,如果用这些小数点的小伙伴们,一定要记住 decimal(10,2) 这也就是保留两位小数,如果不写保留几位的话,存入之后都会被抛弃

二.加减乘除

加法:add

减法:subtract

乘法:multiply

除法:divide

//加法 

bignum3 =  bignum1.add(bignum2);      

System.out.println("求和:" + bignum3); 
//减法 

bignum3 = bignum1.subtract(bignum2); 

System.out.println("求差:" + bignum3); 
//乘法 

bignum3 = bignum1.multiply(bignum2); 

System.out.println("乘法积:" + bignum3); 
//除法 

bignum3 = bignum1.divide(bignum2); 

System.out.println("除法结果:" + bignum3); 

 

三.除以后保留两位小数

本来是准备在除法以后增加.setSacle()的,后来发现如果出来乘除之后无限循环,那么会报错

BigDecimal big = new BigDecimal(4);
big=big.divide(new BigDecimal(3),2,BigDecimal.ROUND_HALF_UP);//会在除完直接保留两位

 

四.直接保留两位小数(四舍五入)

BigDecimal big = new BigDecimal(4);
big.setScale(2, RoundingMode.HALF_UP);

1.setScale简单用法

BigDecimal.setScale();//用于格式化小数点 
setScale(1);//表示保留一位小数,默认用四舍五入方式 
setScale(1,BigDecimal.ROUND_DOWN);//直接删除多余的小数位,如2.35会变成2.3 
setScale(1,BigDecimal.ROUND_UP);//进位处理,2.33变成2.4 
setScale(1,BigDecimal.ROUND_HALF_UP);//四舍五入,2.35变成2.4
setScaler(1,BigDecimal.ROUND_HALF_DOWN);//四舍五入,如果5以下则舍弃,2.34 变成 2.3,如果5以上包括5就会 2.35 变成 2.4

 

五.BigDecimal的比较

1.BigDecimal的非0判断

BigDecimal big = new BigDecimal(0);
big.compareTo(BigDecimal.ZERO)==0,返回true则等于0,返回false,则不等于0

2.BigDecimal之间的比较

BigDescimal bd1 = new BigDescimal();
BigDescimal bd2 = new BigDescimal();

Integer a = bd1.compareTo(bd2);

a = -1,表示bd1小于bd2;

a = 0,表示bd1等于bd2;

a = 1,表示bd1大于bd2;

 

六. BigDecimal在数据库中的存储

decimal 这个字段  如果不跟任何的限制,那么默认 decimal(10) 也就是十位数,还是整数

如果是 decimal(10,5)  意思是 十位数其中有五位是小数点,也就是 50000.00000,
如果出现前五位超出范围了,比如 500000,那么就会爆出DataIntegrityViolationException,超出范围

decimal(设置多长,设置后面跟多少位小数,如果不够零补全);

 

七. 整数则显示整数,小数则保留两位

public static void main(String[] args) {
	DecimalFormat df = new DecimalFormat("###.##");
        BigDecimal b1 = new BigDecimal("28.0109");
        BigDecimal b2 = new BigDecimal("28.00");
        System.out.println("小数格式化:" + df.format(b1));
        System.out.println("整数格式化:" + df.format(b2));
}

  

 

推荐阅读