电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

淺談Java基礎知識之BigDecimal

瀏覽:2日期:2022-08-12 17:33:27
目錄一、基本使用二、舍入模式三、注意事項四、異常處理 ArithmeticException異常一、基本使用

使用示例:

// 初始化BigDecimal bd1=new BigDecimal('456');BigDecimal bd2=new BigDecimal('123');// 加BigDecimal add=bd1.add(bd2);// 減BigDecimal subtract=bd1.subtract(bd2); // 乘BigDecimal multiply=bd1.multiply(bd2); // 除BigDecimal divide=bd1.divide(bd2); // 指數運算, 2 is exponentBigDecimal powerValue=bd2.pow(2); // 四舍五入multiply.setScale(1, RoundingMode.HALF_EVEN);二、舍入模式

枚舉類 java.math.RoundingMode 定義了8種數據的舍入模式,在 BigDecimal 中,可以用 BigDecimal.setScale(int newScale, RoundingMode roundingMode) 來設置數據的精度和舍入模式。

ROUND_UP:向遠離零的方向舍入。 若舍入位為非零,則對舍入部分的前一位數字加1;若舍入位為零,則直接舍棄。即為向外取整模式。 ROUND_DOWN:向接近零的方向舍入。 不論舍入位是否為零,都直接舍棄。即為向內取整模式。 ROUND_CEILING:向正無窮大的方向舍入。 若 BigDecimal 為正,則舍入行為與 ROUND_UP 相同;若為負,則舍入行為與 ROUND_DOWN 相同。即為向上取整模式。 ROUND_FLOOR:向負無窮大的方向舍入。 若 BigDecimal 為正,則舍入行為與 ROUND_DOWN 相同;若為負,則舍入行為與 ROUND_UP 相同。即為向下取整模式。 ROUND_HALF_UP:向“最接近的”整數舍入。 若舍入位大于等于5,則對舍入部分的前一位數字加1;若舍入位小于5,則直接舍棄。即為四舍五入模式。 ROUND_HALF_DOWN:向“最接近的”整數舍入。 若舍入位大于5,則對舍入部分的前一位數字加1;若舍入位小于等于5,則直接舍棄。即為五舍六入模式。 ROUND_HALF_EVEN:向“最接近的”整數舍入。 若(舍入位大于5)或者(舍入位等于5且前一位為奇數),則對舍入部分的前一位數字加1; 若(舍入位小于5)或者(舍入位等于5且前一位為偶數),則直接舍棄。即為銀行家舍入模式。 ROUND_UNNECESSARY 斷言請求的操作具有精確的結果,因此不需要舍入。 如果對獲得精確結果的操作指定此舍入模式,則拋出ArithmeticException。

淺談Java基礎知識之BigDecimal

三、注意事項

1.大量的數學計算時,使用 基本數據類型 而不是BigInteger 和 BigDecimal 。

原因:由于是不可變(immutable)的,在進行每一步運算時,都會產生一個新的對象,引起開銷。建議:應盡量用 long , float , double 等基本類型做科學計算或者工程計算。設計的目的是用來精確地表示大整數和小數,例如進行金額等比較敏感的數據運算。

2.構造 BigDecimal 時,使用 String 而不是 double 。

原因:有些數字用 double 根本無法精確表示,傳給 BigDecimal 構造方法時就已經不精確了。例如:new BigDecimal(0.1)得到的值是0.1000000000000000055511151231257827021181583404541015625。建議:使用 new BigDecimal(“0.1”) 得到的值是 0.1。BigDecimal 有4個構造方法,其中的兩個用 BigInteger 構造,一個用 double 構造,一個用 String 構造。

3.比較兩個 BigDecimal 值時,使用 compareTo() 而不是 equals()。

原因: equals() 方法認為 0.1 和 0.1 是相等的,返回true;認為 0.10 和 0.1 是不等的,返回false。compareTo() 方法則認為 0.1 與 0.1 相等,0.10 與 0.1 也相等。

4.另外還有一些情形,任意精度的小數運算仍不能表示精確結果。例如,1 除以 9 會產生無限循環的小數 .111111…。出于這個原因,在進行除法運算時,BigDecimal可以讓您顯式地控制舍入。

四、異常處理 ArithmeticException異常

在使用BigDecimal數據類型進行計算時,會有三種情況拋出 ArithmeticException,分別是:

1.當除數為 0 時,這種情況比較常見,所以我們在進行除法運算之前先判斷下除數是否為 0;

2.如果運算的結果是無線循環的小數,并且在除的時候沒有對結果設置精確的位數;BigDecimal divide 方法結果為無限小數問題 10/3=3.3333333333333333…

public static void main(String[] args) {BigDecimal a = new BigDecimal('10');BigDecimal o = new BigDecimal('3');System.out.print(a.divide(o,2, BigDecimal.ROUND_DOWN).doubleValue());}

Note:不設置精度范圍會出現異常

3.當我們設置了結果的舍入模式是 ROUND_UNNECESSARY 模式時:如果確保了計算的結果是精確的,則不會拋出異常;否則,就會拋出ArithmeticException 異常。

4.只設置精度(小數點后面的位數,scale),但沒有設置舍入模式(roundingModel)時,會不知道如何對小數舍入而報錯。所以在設置精度時要連舍入模式一起設置。

// wrong code bd = new BigDecimal(1.5); // is actually 1.4999.... bd.setScale(1); // throws ArithmeticException // wright code a = new BigDecimal('2.5'); // digit left of 5 is even, so round down b = new BigDecimal('1.5'); // digit left of 5 is odd, so round up a.setScale(0, BigDecimal.ROUND_HALF_EVEN).toString() // => 2 b.setScale(0, BigDecimal.ROUND_HALF_EVEN).toString() // => 2

5.指數運算,指數 exponent 為負數時If you are raising things to negative exponents, you must specify a MathContext in BigDecimal.pow(int, MathContext) so it knows how much precision to use ? otherwise, BigDecimal will try to compute it to infinite precision, which is not possible for some values.

//wrong codeBigDecimal powerValue=bd2.pow(-27);// -27 is exponent

到此這篇關于淺談Java基礎知識之BigDecimal的文章就介紹到這了,更多相關Java BigDecimal內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
主站蜘蛛池模板: 飞扬动力官网-广告公司管理软件,广告公司管理系统,喷绘写真条幅制作管理软件,广告公司ERP系统 | 污水处理设备-海普欧环保集团有限公司 | 西安微信朋友圈广告投放_微信朋友圈推广_西安度娘网络科技有限公司 | 比士亚-专业恒温恒湿酒窖,酒柜,雪茄柜的设计定制 | 广东风淋室_广东风淋室厂家_广东风淋室价格_广州开源_传递窗_FFU-广州开源净化科技有限公司 | 婚博会2024时间表_婚博会门票领取_婚博会地址-婚博会官网 | 防堵吹扫装置-防堵风压测量装置-电动操作显示器-兴洲仪器 | 电地暖-电采暖-发热膜-石墨烯电热膜品牌加盟-暖季地暖厂家 | 安徽免检低氮锅炉_合肥燃油锅炉_安徽蒸汽发生器_合肥燃气锅炉-合肥扬诺锅炉有限公司 | 磁力抛光机_磁力研磨机_磁力去毛刺机_精密五金零件抛光设备厂家-冠古科技 | 【铜排折弯机,钢丝折弯成型机,汽车发泡钢丝折弯机,线材折弯机厂家,线材成型机,铁线折弯机】贝朗折弯机厂家_东莞市贝朗自动化设备有限公司 | 【德信自动化】点胶机_全自动点胶机_自动点胶机厂家_塑料热压机_自动螺丝机-深圳市德信自动化设备有限公司 | SPC工作站-连杆综合检具-表盘气动量仪-内孔缺陷检测仪-杭州朗多检测仪器有限公司 | 恒温槽_恒温水槽_恒温水浴槽-上海方瑞仪器有限公司 | 交联度测试仪-湿漏电流测试仪-双85恒温恒湿试验箱-常州市科迈实验仪器有限公司 | 安平县鑫川金属丝网制品有限公司,声屏障,高速声屏障,百叶孔声屏障,大弧形声屏障,凹凸穿孔声屏障,铁路声屏障,顶部弧形声屏障,玻璃钢吸音板 | 高尔夫球杆_高尔夫果岭_高尔夫用品-深圳市新高品体育用品有限公司 | 磁粉制动器|张力控制器|气胀轴|伺服纠偏控制器整套厂家--台灵机电官网 | 微型气象仪_气象传感器_防爆气象传感器-天合传感器大全 | 涡轮流量计_LWGY智能气体液体电池供电计量表-金湖凯铭仪表有限公司 | 船用泵,船用离心泵,船用喷射泵,泰州隆华船舶设备有限公司 | 青岛代理记账_青岛李沧代理记账公司_青岛崂山代理记账一个月多少钱_青岛德辉财税事务所官网 | 动库网动库商城-体育用品专卖店:羽毛球,乒乓球拍,网球,户外装备,运动鞋,运动包,运动服饰专卖店-正品运动品网上商城动库商城网 - 动库商城 | 石牌坊价格石牌坊雕刻制作_石雕牌坊牌楼石栏杆厂家_山东嘉祥石雕有限公司 | 拖链电缆_柔性电缆_伺服电缆_坦克链电缆-深圳市顺电工业电缆有限公司 | 台式核磁共振仪,玻璃软化点测定仪,旋转高温粘度计,测温锥和测温块-上海麟文仪器 | 洁净实验室工程-成都手术室净化-无尘车间装修-四川华锐净化公司-洁净室专业厂家 | RV减速机-蜗轮蜗杆减速机-洗车机减速机-减速机厂家-艾思捷 | 山东限矩型液力偶合器_液力耦合器易熔塞厂家-淄博市汇川源机械厂 | 齿轮减速马达一体式_蜗轮蜗杆减速机配电机-德国BOSERL齿轮减速电动机生产厂家 | 证券新闻,热播美式保罗1984第二部_腾讯1080p-仁爱影院 | 石牌坊价格石牌坊雕刻制作_石雕牌坊牌楼石栏杆厂家_山东嘉祥石雕有限公司 | 宿舍管理系统_智慧园区系统_房屋/房产管理系统_公寓管理系统 | 断桥铝破碎机_发动机破碎机_杂铝破碎机厂家价格-皓星机械 | 西点培训学校_法式西点培训班_西点师培训_西点蛋糕培训-广州烘趣西点烘焙培训学院 | 两头忙,井下装载机,伸缩臂装载机,30装载机/铲车,50装载机/铲车厂家_价格-莱州巨浪机械有限公司 | 热熔胶网膜|pes热熔网膜价格|eva热熔胶膜|热熔胶膜|tpu热熔胶膜厂家-苏州惠洋胶粘制品有限公司 | 首页|专注深圳注册公司,代理记账报税,注册商标代理,工商变更,企业400电话等企业一站式服务-慧用心 | 北京自然绿环境科技发展有限公司专业生产【洗车机_加油站洗车机-全自动洗车机】 | 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | 深圳富泰鑫五金_五金冲压件加工_五金配件加工_精密零件加工厂 |