概述
BigDecimal类位于java.math.BigDecimal包下。使用此类可以完成大的小数操作,而且也可以使用此类进行精确的四舍五入,这一点在开发中经常使用。
对于不需要任何准确计算精度的程序可以直接使用float或double完成,但是如果需要精确计算结果,则必须使用BigDecimal类。
1.BigDecimal类常用方法
1) BigDecimal(String val):构造方法,将String类型转换成BigDecimal类型数据。
2) BigDecimal(double val):构造方法,将double类型转换成BigDecimal类型数据。 (不建议使用)
3) BigDecimal(int val):构造方法,将int类型转换成BigDecimal类型数据。
2.BigDecimal运算
1) BigDecimal add(BigDecimal value):加法,求两个BigDecimal类型数据的和。
2) BigDecimal subtract(BigDecimal value):减法,求两个BigDecimal类型数据的差。
3) BigDecimal multiply(BigDecimal value):乘法,求两个BigDecimal类型数据的积。
4) BigDecimal divide(BigDecimal divisor):除法,求两个BigDecimal类型数据的商。
5) BigDecimal remainder(BigDecimal divisor):求余数,求BigDecimal类型数据除以divisor的余数。
6) BigDecimal max(BigDecimal value):最大数,求两个BigDecimal类型数据的最大值。
7) BigDecimal min(BigDecimal value):最小数,求两个BigDecimal类型数据的最小值。
8) BigDecimal abs():绝对值,求BigDecimal类型数据的绝对值。
9) BigDecimal negate():相反数,求BigDecimal类型数据的相反数。
这里有一点需要注意的是除法运算divide。
BigDecimal除法可能出现不能整除的情况,比如 4.5/1.3,这时会报错java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result。
其实divide有三个参数的方法
BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
第一参数表示除数。
第二个参数表示小数点后保留位数。
第三个参数表示舍入模式。只有在作除法运算或四舍五入时才用到舍入模式。
舍入模式有下面这几种:
ROUND_CEILING //向正无穷方向舍入
ROUND_DOWN //向零方向舍入
ROUND_FLOOR //向负无穷方向舍入
ROUND_HALF_DOWN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5
ROUND_HALF_EVEN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位 数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN
ROUND_HALF_UP //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55 保留一位小数结果为1.6
ROUND_UNNECESSARY //计算结果是精确的,不需要舍入模式
ROUND_UP //向远离0的方向舍入
代码:
BigDecimal a=new BigDecimal("4.5");
BigDecimal b=new BigDecimal("1.5");
BigDecimal c=new BigDecimal("2");
BigDecimal result1=a.divide(b,2,BigDecimal.ROUND_HALF_UP);
BigDecimal result2=a.divide(c,2,BigDecimal.ROUND_HALF_UP);
Log.d("TAG","4.5/1.5="+result1);
Log.d("TAG","4.5/2="+result2);
结果:
4.5/1.5=3.00
4.5/2=2.25
3.BigDecimal 小数点处理
需求:计算结果保留三位小数。
代码:
/**
* 方式1
* 0.000:三位小数 同理 0.00:两位小数 依次类推...
* */
double a=3.154215;
DecimalFormat myformat=new java.text.DecimalFormat("0.000");
String result1 = myformat.format(a);
Log.d("TAG",a+"保留三位小数:"+result1);
/**
* 方式2
* #.000:三位小数 同理 #.00:两位小数
* */
double b=3.256321;
DecimalFormat df=new DecimalFormat("#.000");
String result2=df.format(b);
Log.d("TAG",b+"保留三位小数:"+result2);
/**
* BigDecimal类操作保留几位小数
* */
double c=3.558525;
BigDecimal bigDecimal=new BigDecimal(c);
double result3=bigDecimal.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
Log.d("TAG",c+"保留三位小数并四舍五入:"+result3);
结果:
3.154215保留三位小数:3.154
3.256321保留三位小数:3.256
3.558525保留三位小数并四舍五入:3.559
最后
以上就是认真帅哥为你收集整理的BigDecimal的全部内容,希望文章能够帮你解决BigDecimal所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复