中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中BigDecimal的加減乘除、比較大小與使用注意事項

發布時間:2020-08-23 13:44:16 來源:腳本之家 閱讀:305 作者:maytree_sun 欄目:編程語言

前言

借用《Effactive Java》這本書中的話,float和double類型的主要設計目標是為了科學計算和工程計算。他們執行二進制浮點運算,這是為了在廣域數值范圍上提供較為精確的快速近似計算而精心設計的。然而,它們沒有提供完全精確的結果,所以不應該被用于要求精確結果的場合。但是,商業計算往往要求結果精確,在java 里面,int 的最大值是:2147483647,現在如果想用比這個數大怎么辦?換句話說,就是數值較大,這時候就用到了BigDecimal ,關于BigDecimal 的介紹有很多,需要了解的朋友可以參考這篇文章:https://www.jb51.net/article/55395.htm

一、BigDecimal 的加減乘除

BigDecimal bignum1 = new BigDecimal("10"); 
BigDecimal bignum2 = new BigDecimal("5"); 
BigDecimal bignum3 = null; 
 
//加法 
bignum3 = bignum1.add(bignum2); 
System.out.println("和 是:" + bignum3); 
 
//減法 
bignum3 = bignum1.subtract(bignum2); 
System.out.println("差 是:" + bignum3); 
 
//乘法 
bignum3 = bignum1.multiply(bignum2); 
System.out.println("積 是:" + bignum3); 
 
//除法 
bignum3 = bignum1.divide(bignum2); 
System.out.println("商 是:" + bignum3); 

運行結果為:

Java中BigDecimal的加減乘除、比較大小與使用注意事項

二、BigDecimal 的比較大小。

BigDecimal num1 = new BigDecimal("0"); 
BigDecimal num2 = new BigDecimal("1"); 
BigDecimal num3 = new BigDecimal("2"); 
 
BigDecimal num = new BigDecimal("1"); //用做比較的值 
 
System.out.println(num1.compareTo(num)); //小于 時,返回 -1 
System.out.println(num2.compareTo(num)); //等于 時,返回 0 
System.out.println(num3.compareTo(num)); //大于 時,返回 1 

這是輸出結果:

Java中BigDecimal的加減乘除、比較大小與使用注意事項

解釋下注釋里面了。

補充:

BigInteger 也可以存放比較大的數, 和 BigDecimal 的區別是 :BigInteger 存放的是大的整數,而BigDecimal 存放大的小數

繼續補充一下,用BigDecimal 寫個for循環。

for (BigDecimal i = new BigDecimal("0"); i.compareTo(new BigDecimal("10")) != 1; i = i.add(new BigDecimal("1"))) { 
 System.out.print(i + "\t"); 
} 

控制臺打印的是從0 到 10 。

三、Java中的BigDecimal使用注意事項

1.BigDecial是immutable的,就像String一樣,它的所有操作都會生成一個新的對象,所以

 amount.add( thisAmount );

是錯誤的;而應該是:

 amount = amount.add( thisAmount );

2. 不要用equals方法來比較BigDecimal對象,因為它的equals方法會比較scale,如果scale不一樣,它會返回false;

例如:

 BigDecimal a = new BigDecimal("2.00");
 BigDecimal b = new BigDecimal("2.0");
 print(a.equals(b)); // false

所以你應該使用compareTo()和signum()方法

 a.compareTo(b); // returns (-1 if a < b), (0 if a == b), (1 if a > b)
 a.signum(); // returns (-1 if a < 0), (0 if a == 0), (1 if a > 0)

3. 使用BigDecimal的字符串構造函數,不要使用double參數的構造函數,否則的話會出現你不想要的結果。

例如下面的代碼分別使用double和String的構造函數,然后使用HALF_EVEN的round方法,但是輸出結果不一樣:

System.out.println("=================="); 
for(int i = 0; i < 10; i ++) { 
 StringBuffer sb = new StringBuffer(); 
 sb.append("0."); 
 sb.append(i); 
 sb.append("5"); 
 BigDecimal bdx = new BigDecimal(sb.toString()); 
 System.out.println(sb + " " +bdx.setScale(1, RoundingMode.HALF_EVEN)); 
} 
 
System.out.println("=================="); 
for(int i = 0; i < 10; i ++) { 
 StringBuffer sb = new StringBuffer(); 
 sb.append("0."); 
 sb.append(i); 
 sb.append("5"); 
 BigDecimal bdx = new BigDecimal(Double.valueOf(sb.toString())); 
 System.out.println(sb + " " +bdx.setScale(1, RoundingMode.HALF_EVEN)); 
} 

輸出是:

==================
0.05 0.0
0.15 0.2
0.25 0.2
0.35 0.4
0.45 0.4
0.55 0.6
0.65 0.6
0.75 0.8
0.85 0.8
0.95 1.0
==================
0.05 0.1
0.15 0.1
0.25 0.2
0.35 0.3
0.45 0.5
0.55 0.6
0.65 0.7
0.75 0.8
0.85 0.8
0.95 0.9

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

临海市| 台江县| 长沙市| 大连市| 新昌县| 松江区| 准格尔旗| 静乐县| 永丰县| 盘山县| 阜康市| 福泉市| 丰镇市| 沾化县| 岳普湖县| 临清市| 大竹县| 河间市| 潍坊市| 民丰县| 巴林右旗| 固始县| 广河县| 南和县| 潍坊市| 长泰县| 炎陵县| 广水市| 聂拉木县| 大荔县| 称多县| 景东| 仁怀市| 乐山市| 宝丰县| 平潭县| 时尚| 华容县| 大安市| 东山县| 彭水|