欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解決Java中new?BigDecimal()的坑

 更新時(shí)間:2022年06月30日 10:40:49   作者:煢煢木偶  
這篇文章主要介紹了解決Java中new?BigDecimal()的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

new BigDecimal()的坑

先看一段代碼示例:

System.out.println(new BigDecimal(0.99));
System.out.println(new BigDecimal("0.99"));
System.out.println(BigDecimal.valueOf(0.99));
System.out.println(new BigDecimal(Double.valueOf(0.99)));
System.out.println(new BigDecimal(Double.valueOf(0.99).toString()));

輸出結(jié)果如下:

0.9899999999999999911182158029987476766109466552734375
0.99
0.99
0.9899999999999999911182158029987476766109466552734375
0.99

可以看到new BigDecimal(double)類型時(shí),小數(shù)的精度出現(xiàn)擴(kuò)展。

總結(jié):如果使用new BigDecimal()時(shí),盡可能轉(zhuǎn)換為String,或者直接使用BigDecimal.valueof(double)

關(guān)于BigDecimal用法

如果對(duì)數(shù)值結(jié)果精度要求很高,那么就可以使用BigDecimal,BigDecimal可以精準(zhǔn)的控制小數(shù)點(diǎn)后面的數(shù)字

1.實(shí)例 BigDecimal 對(duì)象

通常會(huì)使用 String 和 int 構(gòu)造方法實(shí)例出 BigDecimal 對(duì)象,即 

new BigDecimal(String val);
new BigDecimal(int val);

如參數(shù)為 double 類型,得先轉(zhuǎn)換成 String 類型再入?yún)?/p>

new BigDecimal(Double.toString(123.123));

2. BigDecimal 加減乘除

加減乘除都是用 BigDecimal 對(duì)象點(diǎn)(.)加減乘除方法入?yún)?BigDecimal 對(duì)象,返回的也是 BigDecimal 對(duì)象

  • 加:BigDecimal add = new BigDecimal("123.123").add(new BigDecimal("123.123"));  ---> 246.246
  • 減:BigDecimal subtract = new BigDecimal("123.123").subtract(new BigDecimal("123.123"));  ---> 0.000
  • 乘:BigDecimal multiply = new BigDecimal("123.123").multiply(new BigDecimal("123.123"));  ---> 15159.273129
  • 除:BigDecimal divide = new BigDecimal("123.123").divide(new BigDecimal("123.123"));  ---> 1

注:其中除法一般不會(huì)這樣直接除,在不能整除的情況下,這樣運(yùn)行程序是會(huì)報(bào)錯(cuò)的,所以一般除法會(huì)使用下面這個(gè)重載方法

new BigDecimal("10").divide("40",1,ROUND_HALF_UP); ?---> 0.3

正常計(jì)算 10/40 結(jié)果為 0.25, 在這里是計(jì)算 十除以四十,保留一位小數(shù),四舍五入模式。所以得到的結(jié)果為 0.3

最常用的模式:

  • ① ROUND_HALF_UP:四舍五入
  • ② ROUND_HALF_DOWN:向下取舍(去掉保留小數(shù)位后面的小數(shù))

3. Scale 屬性操作

  • ① 獲取小數(shù)的位數(shù):new BigDecimal("123.123").scale()  ---> 3
  • ② setScale() 方法保留幾位小數(shù)

- setScale(int NewScale):(注:入?yún)⒌臄?shù)字只能大于等于小數(shù)的位數(shù),括號(hào)中只能入?yún)⒋笥诘扔?3 的數(shù))

例:

new BigDecimal("123.123").setScale(3) ?---> 123.123
new BigDecimal("123.123").setScale(5) ?---> 123.12300
- setScale(int newScale, RoundingMode roundingMode):

例:

new BigDecimal("123.123").setScale(2,RoundingMode.HALF_UP) ?---> 123.12
new BigDecimal("123.125").setScale(2,RoundingMode.HALF_UP) ?---> 123.13
new BigDecimal("123.123").setScale(2,RoundingMode.HALF_DOWN) ?---> 123.12
new BigDecimal("123.125").setScale(2,RoundingMode.HALF_DOWN) ?---> 123.12

4. compareTo 比較大小

等于:

new BigDecimal("123.123").compareTo(new BigDecimal("123.123"))==0 ?---> true
new BigDecimal("123.123").compareTo(new BigDecimal("123.123")) ?---> 0

如果 compareTo 的結(jié)果為 0 的話,就證明兩個(gè)對(duì)象相等(當(dāng)左邊不等于右邊時(shí),第一個(gè)表達(dá)式則為 false)

小于:

new BigDecimal("123.122").compareTo(new BigDecimal("123.123")) < 0 ?---> true
new BigDecimal("123.122").compareTo(new BigDecimal("123.123")) ?---> -1

如果 compareTo 的結(jié)果為 -1 的話,就證明左邊小于右邊(當(dāng)左邊大于等于右邊時(shí),第一個(gè)表達(dá)式則為 false)

大于:

new BigDecimal("123.124").compareTo(new BigDecimal("123.123")) > 0 ?---> true
new BigDecimal("123.124").compareTo(new BigDecimal("123.123")) ?---> 1

如果 compareTo 的結(jié)果為 1 的話,就證明左邊大于右邊(當(dāng)左邊小于等于右邊時(shí),第一個(gè)表達(dá)式則為 false)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java實(shí)現(xiàn)簡(jiǎn)單圖形界面計(jì)算器

    Java實(shí)現(xiàn)簡(jiǎn)單圖形界面計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)單圖形界面計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • mybatis3.4.6 批量更新 foreach 遍歷map 的正確姿勢(shì)詳解

    mybatis3.4.6 批量更新 foreach 遍歷map 的正確姿勢(shì)詳解

    這篇文章主要介紹了mybatis3.4.6 批量更新 foreach 遍歷map 的正確姿勢(shì)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • SpringBoot使用Jsp的示例代碼

    SpringBoot使用Jsp的示例代碼

    這篇文章主要介紹了SpringBoot使用Jsp的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • SpringMVC中攔截器的實(shí)現(xiàn)

    SpringMVC中攔截器的實(shí)現(xiàn)

    SpringMVC 中的 Interceptor 攔截器是非常重要和相當(dāng)有用的,它的主要作用是攔截指定的用戶請(qǐng)求,并進(jìn)行相應(yīng)的預(yù)處理與后處理,這篇文章主要介紹了SpringMVC的攔截器相關(guān)知識(shí),需要的朋友可以參考下
    2022-01-01
  • 阿里開源Java診斷工具神器使用及場(chǎng)景詳解

    阿里開源Java診斷工具神器使用及場(chǎng)景詳解

    這篇文章主要為大家介紹了阿里開源Java診斷工具神器使用及場(chǎng)景詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 如何使用BufferedReader循環(huán)讀文件

    如何使用BufferedReader循環(huán)讀文件

    這篇文章主要介紹了如何使用BufferedReader循環(huán)讀文件的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • java把excel內(nèi)容上傳到mysql實(shí)例代碼

    java把excel內(nèi)容上傳到mysql實(shí)例代碼

    這篇文章主要介紹了java把excel內(nèi)容上傳到mysql實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Java Process.waitFor()方法詳解

    Java Process.waitFor()方法詳解

    這篇文章主要介紹了Java Process.waitFor()方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • spring boot jar部署控制臺(tái)日志亂碼的解決

    spring boot jar部署控制臺(tái)日志亂碼的解決

    這篇文章主要介紹了spring boot jar部署控制臺(tái)日志亂碼的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 基于SpringBoot和Vue3的博客平臺(tái)文章列表與分頁(yè)功能實(shí)現(xiàn)

    基于SpringBoot和Vue3的博客平臺(tái)文章列表與分頁(yè)功能實(shí)現(xiàn)

    在前面的教程中,我們已經(jīng)實(shí)現(xiàn)了基于Spring Boot和Vue3的發(fā)布、編輯、刪除文章功能。本教程將繼續(xù)引導(dǎo)您實(shí)現(xiàn)博客平臺(tái)的文章列表與分頁(yè)功能,需要的朋友可以參考閱讀
    2023-04-04

最新評(píng)論