最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2017年11月14日 09:27:32   作者:maytree_sun  
對(duì)于不需要任何準(zhǔn)確計(jì)算精度的數(shù)字可以直接使用float或double,但是如果需要精確計(jì)算的結(jié)果,則必須使用BigDecimal類,而且使用BigDecimal類也可以進(jìn)行大數(shù)的操作,下面這篇文章給大家介紹了Java中BigDecimal的加減乘除、比較大小與使用注意事項(xiàng),需要的朋友可以參考下。

前言

借用《Effactive Java》這本書中的話,float和double類型的主要設(shè)計(jì)目標(biāo)是為了科學(xué)計(jì)算和工程計(jì)算。他們執(zhí)行二進(jìn)制浮點(diǎn)運(yùn)算,這是為了在廣域數(shù)值范圍上提供較為精確的快速近似計(jì)算而精心設(shè)計(jì)的。然而,它們沒有提供完全精確的結(jié)果,所以不應(yīng)該被用于要求精確結(jié)果的場(chǎng)合。但是,商業(yè)計(jì)算往往要求結(jié)果精確,在java 里面,int 的最大值是:2147483647,現(xiàn)在如果想用比這個(gè)數(shù)大怎么辦?換句話說,就是數(shù)值較大,這時(shí)候就用到了BigDecimal ,關(guān)于BigDecimal 的介紹有很多,需要了解的朋友可以參考這篇文章:http://m.fzitv.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); 

運(yùn)行結(jié)果為:


二、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)); //小于 時(shí),返回 -1 
System.out.println(num2.compareTo(num)); //等于 時(shí),返回 0 
System.out.println(num3.compareTo(num)); //大于 時(shí),返回 1 

這是輸出結(jié)果:

解釋下注釋里面了。

補(bǔ)充:

BigInteger 也可以存放比較大的數(shù), 和 BigDecimal 的區(qū)別是 :BigInteger 存放的是大的整數(shù),而BigDecimal 存放大的小數(shù)

繼續(xù)補(bǔ)充一下,用BigDecimal 寫個(gè)for循環(huán)。

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

控制臺(tái)打印的是從0 到 10 。

三、Java中的BigDecimal使用注意事項(xiàng)

1.BigDecial是immutable的,就像String一樣,它的所有操作都會(huì)生成一個(gè)新的對(duì)象,所以

 amount.add( thisAmount );

是錯(cuò)誤的;而應(yīng)該是:

 amount = amount.add( thisAmount );

2. 不要用equals方法來比較BigDecimal對(duì)象,因?yàn)樗膃quals方法會(huì)比較scale,如果scale不一樣,它會(huì)返回false;

例如:

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

所以你應(yīng)該使用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的字符串構(gòu)造函數(shù),不要使用double參數(shù)的構(gòu)造函數(shù),否則的話會(huì)出現(xiàn)你不想要的結(jié)果。

例如下面的代碼分別使用double和String的構(gòu)造函數(shù),然后使用HALF_EVEN的round方法,但是輸出結(jié)果不一樣:

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

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Java線程之間數(shù)據(jù)傳遞的實(shí)現(xiàn)示例(4種)

    Java線程之間數(shù)據(jù)傳遞的實(shí)現(xiàn)示例(4種)

    我們經(jīng)常會(huì)遇到父子線程數(shù)據(jù)傳遞(非調(diào)用參數(shù))的場(chǎng)景,本文主要介紹了Java線程之間數(shù)據(jù)傳遞的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • Java遞歸實(shí)現(xiàn)斐波那契數(shù)列

    Java遞歸實(shí)現(xiàn)斐波那契數(shù)列

    這篇文章主要為大家詳細(xì)介紹了Java遞歸實(shí)現(xiàn)斐波那契數(shù)列,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Jar包反編譯修改代碼后重新打jar包圖文詳解

    Jar包反編譯修改代碼后重新打jar包圖文詳解

    這篇文章主要給大家介紹了關(guān)于Jar包反編譯修改代碼后重新打jar包的相關(guān)資料,JAR文件就是Java Archive(Java檔案文件),它是 Java的一種文檔格式,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • 利用JDBC的PrepareStatement打印真實(shí)SQL的方法詳解

    利用JDBC的PrepareStatement打印真實(shí)SQL的方法詳解

    PreparedStatement是預(yù)編譯的,對(duì)于批量處理可以大大提高效率. 也叫JDBC存儲(chǔ)過程,下面這篇文章主要給大家介紹了關(guān)于利用JDBC的PrepareStatement打印真實(shí)SQL的方法,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-07-07
  • springboot -sse -flux 服務(wù)器推送消息的方法

    springboot -sse -flux 服務(wù)器推送消息的方法

    這篇文章主要介紹了springboot -sse -flux 服務(wù)器推送消息的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-11-11
  • 使用自定義注解實(shí)現(xiàn)加解密及脫敏方式

    使用自定義注解實(shí)現(xiàn)加解密及脫敏方式

    這篇文章主要介紹了使用自定義注解實(shí)現(xiàn)加解密及脫敏方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 詳解Mybatis 傳遞參數(shù)類型為L(zhǎng)ist的取值問題

    詳解Mybatis 傳遞參數(shù)類型為L(zhǎng)ist的取值問題

    這篇文章主要介紹了詳解Mybatis 傳遞參數(shù)類型為L(zhǎng)ist的取值問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Java代碼的三根頂梁柱:循環(huán)結(jié)構(gòu)

    Java代碼的三根頂梁柱:循環(huán)結(jié)構(gòu)

    這篇文章主要介紹了JAVA 循環(huán)結(jié)構(gòu)的相關(guān)資料,文中講解的非常細(xì)致,示例代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2021-08-08
  • Spring依賴注入DI之三種依賴注入類型詳解

    Spring依賴注入DI之三種依賴注入類型詳解

    這篇文章主要介紹了Spring依賴注入DI之三種依賴注入類型詳解,通過 @Autowired 注解,字段注入的實(shí)現(xiàn)方式非常簡(jiǎn)單而直接,代碼的可讀性也很強(qiáng),事實(shí)上,字段注入是三種注入方式中最常用、也是最容易使用的一種,需要的朋友可以參考下
    2023-09-09
  • JPA配置詳解之jpaProperties用法

    JPA配置詳解之jpaProperties用法

    這篇文章主要介紹了JPA配置詳解之jpaProperties用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評(píng)論

南召县| 达拉特旗| 溧水县| 曲阳县| 荔波县| 黎城县| 榆中县| 永康市| 和林格尔县| 商丘市| 兖州市| 新龙县| 迭部县| 新巴尔虎左旗| 灵丘县| 哈巴河县| 湘阴县| 澄迈县| 南江县| 友谊县| 星子县| 泰和县| 新昌县| 南投县| 游戏| 通州区| 金阳县| 仪征市| 伊春市| 盈江县| 威信县| 宜春市| 盐池县| 新乡县| 长乐市| 页游| 光泽县| 桑日县| 西吉县| 桦甸市| 齐河县|