博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转:BigDecimal 使用方法详解
阅读量:5925 次
发布时间:2019-06-19

本文共 2605 字,大约阅读时间需要 8 分钟。

hot3.png

转贴:http://zhangyinhu8680.iteye.com/blog/1536397

BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负 scale 次幂。因此,BigDecimal 表示的数值是 (unscaledValue × 10-scale)。 

可以处理任意长度的浮点数运算。 
BigDecimal add(BigDecimal val) //加法 
BigDecimal subtract (BigDecimal val) //减法 
BigDecimal multiply (BigDecimal val)  //乘法 
BigDecimal divide (BigDecimal val,RoundingMode mode)  //除法 
具体使用 计算: 
  
  加:   a.add(b); 
  减:   a.subtract(b); 
  乘:   a.multiply(b); 
  除:   a.divide(b,2);//2为精度取值 
除法细解: 
  //注意以下相除会抛出异常,原因: 通过BigDecimal的divide方法进行除法时当不整除,出现无限循环小数时,就会抛异常  
        //BigDecimal divideBg = a.divide(b);   
        //解决方法是:设置精确度;就是给divide设置精确的小数点 
divide(xxxxx,2, BigDecimal.ROUND_HALF_EVEN)   
        //其中的第二个参数表示的是:保留小数点之后多少位  
BigDecimal不整除抛出的异常,请设置精确度! 
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. 
at java.math.BigDecimal.divide(BigDecimal.java:1278) 
at main.Main.main(Main.java:41) 
下面我们来看看除法的详细说明: 
   divide(BigDecimal divisor, int scale, introundingMode) 
BigDecimal的setScale方法 
BigDecimal.setScale() 
方法用于格式化小数点 
表示保留一位小数,默认用四舍五入方式 
setScale(1) 
直接删除多余的小数位,如2.35会变成2.3 setScale(1,BigDecimal.ROUND_DOWN) 
进位处理,2.35变成2.4  setScale(1,BigDecimal.ROUND_UP) 
四舍五入,2.35变成2.4  setScale(1,BigDecimal.ROUND_HALF_UP) 
四舍五入,2.35变成2.3,如果是5则向下舍setScaler(1,BigDecimal.ROUND_HALF_DOWN) 
  
注意点一 
scale指的是你小数点后的位数。 
scale()就是BigDecimal类中的方法。如 
BigDecimal b = new BigDecimal("123.456"); 
b.scale()返回的就是3 
注意点二roundingMode是小数的保留模式。它们都是BigDecimal中的常量字段, 
有很多种,如 
BigDecimal.ROUND_HALF_UP表示的就是4舍5入 
注意点三 
divide(BigDecimal divisor, int scale, introundingMode)的意思是说: 
我用一个BigDecimal对象除以divisor后的结果,并且要求这个结果保留有scale个小数位,roundingMode表示的就是保留模式是什么,是四舍五入啊还是其它的 
BigDecimal aa = new  BigDecimal(135.95 );  
BigDecimal bb=new  BigDecimal("100" );  
BigDecimal result=aa.multiply(bb);  //做乘法 
3.java中 BigDecimal类型的可以转换到double类型: 
  用 变量.doubleValue();函数  即可将 BigDecimal 类型数据 转化为 double类型! 
4.java BigDecimal比较大小 
可以通过BigDecimal的compareTo方法来进行比较。 
返回的结果是int类型,-1表示小于,0是等于,1是大于。 
看下面这个例子: 
BigDecimal a = new BigDecimal("1.00"); 
BigDecmial b = new BigDecimal(1); 
原因是:BigDecimal比较时,不仅比较值,而且还比较精度
if(a.compareTo(b)==0) 结果是true 
比较大小可以用 a.compareTo(b) 
返回值    -1 小于   0 等于    1 大于 
5.BigDecimal取其中最大、最小值、绝对值、相反数: 
  a.max (b) //比较取最大值 
  a.min(b) //比较取最小值 
  a.abs()//取最绝对值 
  a.negate()//取相反数 
6.下面是注意 : 
BigDecimal枚举常量用法摘要  : 
CEILING   
          向正无限大方向舍入的舍入模式。 
DOWN   
          向零方向舍入的舍入模式。 
FLOOR   
          向负无限大方向舍入的舍入模式。 
HALF_DOWN   
          向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向下舍入。 
HALF_EVEN   
          向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。 
HALF_UP   
          向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向上舍入。 
UNNECESSARY   
          用于断言请求的操作具有精确结果的舍入模式,因此不需要舍入。 
UP   
          远离零方向舍入的舍入模式。 
 

转载于:https://my.oschina.net/u/2500345/blog/674507

你可能感兴趣的文章
通过源码解析 Node.js 中一个 HTTP 请求到响应的历程
查看>>
CodeIgniter的密码处理论
查看>>
Spring Cloud Config服务器
查看>>
测试人员必学的软件快速测试方法(二)
查看>>
Agora iOS SDK-快速入门
查看>>
引入间接隔离变化(三)
查看>>
统一沟通-技巧-4-让国内域名提供商“提供”SRV记录
查看>>
cocos2d-x 3.0事件机制及用户输入
查看>>
比亚迪速锐F3专用夏季座套 夏天坐垫 四季坐套
查看>>
C++ 数字转换为string类型
查看>>
程序员全国不同地区,微信(面试 招聘)群。
查看>>
【干货】界面控件DevExtreme视频教程大汇总!
查看>>
闭包 !if(){}.call()
查看>>
python MySQLdb安装和使用
查看>>
Java小细节
查看>>
poj - 1860 Currency Exchange
查看>>
chgrp命令
查看>>
Java集合框架GS Collections具体解释
查看>>
洛谷 P2486 BZOJ 2243 [SDOI2011]染色
查看>>
linux 笔记本的温度提示
查看>>