BigDecimal类操作小数

java操作小数

1 BigDecimal类概述

由于在运算的时候,float类型和double很容易丢失精度,演示案例。所以,为了能精确的表示、计算浮点数,Java提供了BigDecimal   不可变的、任意精度的有符号十进制数。

2 构造方法

public BigDecimal(String val):建议使用参数为字符串的构造方法,如果参数为double或float,还是会出现不可预知的精度问题

3 BigDecimal类成员方法

public BigDecimal add(BigDecimal augend):加        

public BigDecimal subtract(BigDecimal subtrahend):减        

public BigDecimal multiply(BigDecimal multiplicand):乘        

public BigDecimal divide(BigDecimal divisor):除        

public BigDecimal divide(BigDecimal divisor,int scale, int roundingMode):商,几位小数,舍取模式
3.1 ROUND_DOWN
BigDecimal b = new BigDecimal("2.225667").setScale(2, BigDecimal.ROUND_DOWN);
	System.out.println(b);//2.22 直接去掉多余的位数
3.2 ROUND_UP
BigDecimal c = new BigDecimal("2.224667").setScale(2, BigDecimal.ROUND_UP);
	System.out.println(c);//2.23 跟上面相反,进位处理
3.3 ROUND_CEILING
BigDecimal f = new BigDecimal("2.224667").setScale(2, BigDecimal.ROUND_CEILING);
	System.out.println(f);//2.23 如果是正数,相当于BigDecimal.ROUND_UP
	 
BigDecimal g = new BigDecimal("-2.225667").setScale(2, BigDecimal.ROUND_CEILING);
	System.out.println(g);//-2.22 如果是负数,相当于BigDecimal.ROUND_DOWN
3.4 ROUND_FLOOR
BigDecimal h = new BigDecimal("2.225667").setScale(2, BigDecimal.ROUND_FLOOR);
	System.out.println(h);//2.22 如果是正数,相当于BigDecimal.ROUND_DOWN
			
BigDecimal i = new BigDecimal("-2.224667").setScale(2, BigDecimal.ROUND_FLOOR);
	System.out.println(i);//-2.23 如果是负数,相当于BigDecimal.ROUND_HALF_UP
3.5 ROUND_HALF_UP
BigDecimal d = new BigDecimal("2.225").setScale(2, BigDecimal.ROUND_HALF_UP);
	System.out.println("ROUND_HALF_UP"+d); //2.23  四舍五入(若舍弃部分>=.5,就进位)
3.6 ROUND_HALF_DOWN
BigDecimal e = new BigDecimal("2.225").setScale(2, BigDecimal.ROUND_HALF_DOWN);
	System.out.println("ROUND_HALF_DOWN"+e);//2.22  四舍五入(若舍弃部分>.5,就进位)
3.7 ROUND_HALF_EVEN
BigDecimal j = new BigDecimal("2.225").setScale(2, BigDecimal.ROUND_HALF_EVEN);
	System.out.println(j);//2.22 如果舍弃部分左边的数字为偶数,则作   ROUND_HALF_DOWN 
			
BigDecimal k = new BigDecimal("2.215").setScale(2, BigDecimal.ROUND_HALF_EVEN);
	System.out.println(k);//2.22 如果舍弃部分左边的数字为奇数,则作   ROUND_HALF_UP
3.8 ROUND_UNNECESSARY
BigDecimal l = new BigDecimal("2.215").setScale(3, BigDecimal.ROUND_UNNECESSARY);
	System.out.println(l);
	//断言请求的操作具有精确的结果,因此不需要舍入。
	//如果对获得精确结果的操作指定此舍入模式,则抛出ArithmeticException。

4 附送处理小数的其他方法

   double d = 756.2345566;

 //方法一:最简便的方法,调用DecimalFormat类
   DecimalFormat df = new DecimalFormat(".00");
   System.out.println(df.format(d));

   //方法二:直接通过String类的format函数实现
   System.out.println(String.format("%.2f", d));

   //方法三:通过BigDecimal类实现
   BigDecimal bg = new BigDecimal(d);
   double d3 = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
   System.out.println(d3);

   //方法四:通过NumberFormat类实现
   NumberFormat nf = NumberFormat.getNumberInstance();
   nf.setMaximumFractionDigits(2);
   System.out.println(nf.format(d));

作者:pony_hjc
来源:优快云
原文:https://editor.youkuaiyun.com/md/?articleId=107001730
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值