日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

淺談Java基礎知識之BigDecimal

瀏覽:35日期: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); // 指數(shù)運算, 2 is exponentBigDecimal powerValue=bd2.pow(2); // 四舍五入multiply.setScale(1, RoundingMode.HALF_EVEN);二、舍入模式

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

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

淺談Java基礎知識之BigDecimal

三、注意事項

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

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

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

原因:有些數(shù)字用 double 根本無法精確表示,傳給 BigDecimal 構造方法時就已經(jīng)不精確了。例如: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.另外還有一些情形,任意精度的小數(shù)運算仍不能表示精確結果。例如,1 除以 9 會產(chǎn)生無限循環(huán)的小數(shù) .111111…。出于這個原因,在進行除法運算時,BigDecimal可以讓您顯式地控制舍入。

四、異常處理 ArithmeticException異常

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

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

2.如果運算的結果是無線循環(huán)的小數(shù),并且在除的時候沒有對結果設置精確的位數(shù);BigDecimal divide 方法結果為無限小數(shù)問題 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:不設置精度范圍會出現(xiàn)異常

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

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

// 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.指數(shù)運算,指數(shù) exponent 為負數(shù)時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內容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品嫩模av在线| 国产精品99在线观看| 91精品一区二区三区综合在线爱 | 美女精品久久| 国产精品色网| 日韩国产综合| 麻豆精品视频在线| 青青国产精品| 免费看精品久久片| 亚洲一区欧美| 91精品推荐| 高潮久久久久久久久久久久久久| 亚洲18在线| 午夜国产一区二区| 久久蜜桃精品| 国内亚洲精品| 欧美一级鲁丝片| 91在线成人| 国产精品红桃| 另类综合日韩欧美亚洲| 欧美有码在线| 91亚洲无吗| 欧美久久香蕉| 国产精品亚洲综合久久| 国产私拍福利精品视频二区| 蜜臀精品一区二区三区在线观看 | 美女av在线免费看| 尤物精品在线| 99精品视频在线| 国产综合色产| 亚洲免费中文| 日产欧产美韩系列久久99| 婷婷五月色综合香五月| 日韩不卡在线观看日韩不卡视频| 国产精品最新| 色偷偷色偷偷色偷偷在线视频| 日韩综合在线| 午夜在线精品偷拍| 国产日韩欧美一区二区三区在线观看| 久久久久久久久成人| 136国产福利精品导航网址| 中文字幕一区日韩精品| 免费看日韩精品| 精品视频网站| 美女久久网站| 国产福利电影在线播放| 免费精品视频最新在线| 国产欧美日韩一区二区三区在线| 欧美日韩精品一区二区三区在线观看| 久久天堂影院| 色偷偷偷在线视频播放| 综合国产在线| 精品免费av一区二区三区| 国产亚洲精品v| 日本成人中文字幕在线视频| 国产精品密蕾丝视频下载| 国产亚洲一区| 精品一区三区| 国产字幕视频一区二区| 国产999精品在线观看| 91久久亚洲| 亚洲精品伊人| 精品国产午夜| 蜜臀久久久久久久| 日韩黄色大片| 亚洲精品少妇| 国产精品xxx| 欧美精品一卡| 欧美久久亚洲| 免费精品视频| 亚洲欧美日本日韩| 日韩三级一区| 国产成人精品999在线观看| 日韩综合精品| 国产精品久久| 成人羞羞在线观看网站| 青草久久视频| 一区二区电影在线观看| 久久精品国产99久久| 国产欧美激情| 欧美日韩少妇| 久久香蕉国产| 毛片在线网站| 精品在线91| 视频一区视频二区中文| 99精品一区| 成人精品亚洲| 国产精品调教| 亚洲伊人精品酒店| 亚洲精品乱码久久久久久蜜桃麻豆| 日韩欧美不卡| 欧美一区=区| 久久wwww| 亚洲综合电影| 欧美日韩高清| 国产美女精品| 丝袜亚洲精品中文字幕一区| 亚洲精品激情| 国产精品地址| 999久久久91| 午夜久久免费观看| 久久99伊人| 国产精品白浆| 中文字幕av一区二区三区四区| 国产精区一区二区| 超碰在线99| 精精国产xxxx视频在线播放| 亚洲性图久久| 蜜桃av一区二区| 国产美女亚洲精品7777| 卡一卡二国产精品| 日韩av免费| 日韩精品久久久久久久软件91| 成人一二三区| 中文字幕亚洲影视| 国产综合欧美| 国产不卡人人| 久久99伊人| 97精品中文字幕| 国产精品久久观看| 另类激情亚洲| 韩国久久久久久| 国产精品日本一区二区不卡视频| 欧美日韩国产传媒| 久久久精品网| 日韩欧美另类中文字幕| 欧美不卡高清| 日韩三级精品| 欧美1级日本1级| 久久av资源| 日韩不卡一区二区三区 | 日韩av一级片| 日韩av黄色在线| 亚洲综合五月| 国产毛片一区| 黑丝一区二区| 日韩欧美一区二区三区免费看| 日韩福利在线观看| 亚洲日本国产| 亚洲日本欧美| 免费观看日韩电影| 视频一区在线播放| 亚洲欧美日韩国产| 亚洲一区二区三区四区电影| 欧美日韩国产高清| 日韩精品亚洲一区二区三区免费| 欧美日韩国产观看视频| 国产66精品| 黑森林国产精品av| 午夜欧美视频| 亚洲精品四区| 精品亚洲精品| 日韩视频久久| 最新亚洲国产| 国产精品多人| 久久精品二区三区| 鲁大师成人一区二区三区| 久久成人国产| 国产探花一区| 在线日韩视频| 少妇精品久久久一区二区| 国产精品一国产精品| 国产欧美一区二区三区精品酒店| 激情婷婷综合| 久久亚洲精精品中文字幕| 国产精品日本| 国产精品v一区二区三区| 欧美.日韩.国产.一区.二区| 日本综合精品一区| 国产在线|日韩| 日韩欧美美女在线观看| 日韩毛片在线| 日韩黄色大片网站| 91麻豆国产自产在线观看亚洲| 国产福利资源一区| 亚洲精品一级| 18国产精品| 欧美黄色一区| 午夜精品久久久久久久久久蜜桃| 四虎国产精品免费观看| 日韩在线不卡| 成人日韩在线| 亚洲资源av| 欧美中文一区| 91中文字幕精品永久在线| 日韩欧美午夜| 日韩在线播放一区二区| 欧美日韩一区二区三区四区在线观看 | 免费在线观看一区二区三区| 亚洲a一区二区三区| 激情五月综合网| 青青国产91久久久久久| 国产精品亚洲成在人线| se01亚洲视频| 美女久久久精品| 日韩一级欧洲| 久久三级视频| 日韩精品诱惑一区?区三区| 亚洲精品一二| 亚洲影院天堂中文av色|