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

淺談Java中BigDecimal類的簡(jiǎn)單應(yīng)用

 更新時(shí)間:2023年07月04日 09:25:54   作者:長(zhǎng)安明月  
這篇文章主要介紹了淺談Java中BigDecimal類的簡(jiǎn)單應(yīng)用,BigDecimal是由任意精度的整數(shù)非標(biāo)度值和32位的整數(shù)標(biāo)度組成,如果為零或正數(shù),則標(biāo)度是小數(shù)點(diǎn)后的位數(shù),如果為負(fù)數(shù),則將該數(shù)的非標(biāo)度值乘以?10的負(fù)scale次冪,需要的朋友可以參考下

一、BigDecimal 類簡(jiǎn)介

因?yàn)橛?jì)算機(jī)無(wú)法精確表示浮點(diǎn)數(shù),所以在進(jìn)行數(shù)字運(yùn)算時(shí),如果有 double 或 float 類型的浮點(diǎn)數(shù)參與計(jì)算,容易出現(xiàn)計(jì)算不準(zhǔn)確的情況。在一些對(duì)精度要求很高的系統(tǒng)中,需要使用 BigDecimal 類來(lái)進(jìn)行精確運(yùn)行。

二、創(chuàng)建 BigDecimal 對(duì)象的方式

2.1 使用構(gòu)造方法創(chuàng)建對(duì)象

使用構(gòu)造器方法創(chuàng)建對(duì)象,有多種不同的入?yún)ⅲR?jiàn)的方法如下:

  • BigDecimal(String val)
  • BigDecimal(double val) (備注:不推薦,容易丟精度)

2.2 使用靜態(tài)方法創(chuàng)建對(duì)象

BigDecimal 有多種靜態(tài)方法可以創(chuàng)建對(duì)象,常見(jiàn)的幾種方法如下所示:

  • public static BigDecimal valueOf(double val)
  • public static BigDecimal valueOf(long val)
  • public static BigDecimal valueOf(long unscaledVal, int scale)

以上幾種創(chuàng)建 BigDecimal 的 demo 如下所示。

public static void main(String[] args) {
        BigDecimal num1 = new BigDecimal("123.092");
        System.out.println(num1);
        // 123.092
        // 不推薦此種方法
        BigDecimal num2 = new BigDecimal(123.092);
        System.out.println(num2);
        // 123.0919999999999987494447850622236728668212890625
        BigDecimal num3 = BigDecimal.valueOf(1234.5678);
        System.out.println(num3);
        // 1234.5678
        long num4 = 1234;
        BigDecimal num5 = BigDecimal.valueOf(num4);
        System.out.println(num5);
        // 1234
        BigDecimal num6 = BigDecimal.valueOf(num4, 3);
        System.out.println(num6);
        // 1.234
    }

三、BigDecimal 類的常用方法

BigDecimal 幾種常見(jiàn)計(jì)算方法如下所示。

操作方法函數(shù)
加法public BigDecimal add(BigDecimal augend)
減法public BigDecimal subtract(BigDecimal subtrahend)
乘法public BigDecimal multiply(BigDecimal multiplicand)
除法(限定能除盡的情況,如果除不盡會(huì)拋出異常java.lang.ArithmeticException)public BigDecimal divide(BigDecimal divisor)
除法(可設(shè)置相除結(jié)果保留精度,無(wú)論是否可以除盡,都可以用該方法設(shè)置精度)public BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
求余public BigDecimal remainder(BigDecimal divisor)
求相反數(shù)public BigDecimal negate()

以上幾種操作方法的 demo 如下所示。

四、設(shè)置精度(保留小數(shù)位)

BigDecimal 有多種方法可以設(shè)置精度(即設(shè)置幾位小數(shù))。分述如下。

4.1 DecimalFormat 設(shè)置格式

可以通過(guò) DecimalFormat 設(shè)置保留的格式,demo 如下所示。如何編寫(xiě) DecimalFormat,可以參考網(wǎng)上的介紹,此處不做介紹。

    public static void main(String[] args) {
        // 格式化兩位有效數(shù)字(四舍五入)
        DecimalFormat df = new DecimalFormat("0.00");
        double num1 = 0.145926;
        System.out.println(df.format(num1));
        // 0.15
    }

4.2 BigDecimal setScale(int newScale) 方法設(shè)置精度

可以調(diào)用 BigDecimal 的 setScale(int newScale) 方法來(lái)設(shè)置精度,其中傳入?yún)?shù)即保留的小數(shù)位數(shù)。該方法要求請(qǐng)求的操作具有精確的結(jié)果,否則會(huì)拋出 ArithmeticException。

public static void main(String[] args) {
        BigDecimal num1 = new BigDecimal("1234");
        BigDecimal num2 = num1.setScale(1);
        System.out.println(num2);
        // 1234.0
        BigDecimal num3 = new BigDecimal("1234.45");
        BigDecimal num4 = num3.setScale(1);
        System.out.println(num4);
        // 此處拋出異常:java.lang.ArithmeticException: Rounding necessary
    }

4.3 調(diào)用 BigDecimal 的 setScale(int newScale, int roundingMode) 方法

通過(guò)調(diào)用 BigDecimal 的 setScale(int newScale, int roundingMode) 方法,傳入保留的小數(shù)位數(shù) newScale 以及舍入模式 roundingMode(Java BigDecimal 的舍入模式(RoundingMode)詳解),可以實(shí)現(xiàn)精度設(shè)置,demo 如下所示。

public static void main(String[] args) {
        BigDecimal num1 = new BigDecimal("1234.455");
        BigDecimal num2 = num1.setScale(2, BigDecimal.ROUND_HALF_UP);
        System.out.println(num2);
        // 1234.46
        System.out.println(num2.doubleValue());
        // 1234.46
    }

五、常用乘除法(設(shè)置精度)

5.1 乘法

public static void main(String[] args) {
        BigDecimal num1 = new BigDecimal("1.45");
        BigDecimal num2 = new BigDecimal("2.625");
        BigDecimal ans = num1.multiply(num2).setScale(2, BigDecimal.ROUND_HALF_UP);
        System.out.println(ans);
        // 3.81
        System.out.println(ans.doubleValue());
        // 3.81
        System.out.println(ans.intValue());
        // 3
    }

5.2 除法

public static void main(String[] args) {
        BigDecimal num1 = new BigDecimal("10.45");
        BigDecimal num2 = new BigDecimal("2.625");
        BigDecimal ans = num1.divide(num2, 2, BigDecimal.ROUND_HALF_UP);
        System.out.println(ans);
        // 3.98
        System.out.println(ans.doubleValue());
        // 3.98
        System.out.println(ans.intValue());
        // 3
    }

到此這篇關(guān)于淺談Java中BigDecimal類的簡(jiǎn)單應(yīng)用的文章就介紹到這了,更多相關(guān)Java的BigDecimal類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何在Spring data中使用r2dbc詳解

    如何在Spring data中使用r2dbc詳解

    這篇文章主要給大家介紹了關(guān)于如何在Spring data中使用r2dbc的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 深入理解Java并發(fā)編程之LinkedBlockingQueue隊(duì)列

    深入理解Java并發(fā)編程之LinkedBlockingQueue隊(duì)列

    本文主要介紹了Java并發(fā)編程之LinkedBlockingQueue隊(duì)列,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • SpringBoot項(xiàng)目啟動(dòng)報(bào)錯(cuò)"找不到或無(wú)法加載主類"的解決方法

    SpringBoot項(xiàng)目啟動(dòng)報(bào)錯(cuò)"找不到或無(wú)法加載主類"的解決方法

    在使用 IntelliJ IDEA 開(kāi)發(fā)基于 Spring Boot 框架的 Java 程序時(shí),可能會(huì)出現(xiàn)找不到或無(wú)法加載主類 com.example.springboot.SpringbootApplication的錯(cuò)誤提示,下面我們來(lái)看看如何解決吧
    2025-03-03
  • 一文掌握J(rèn)ava 數(shù)據(jù)結(jié)構(gòu)超詳細(xì)筆記(收藏版)

    一文掌握J(rèn)ava 數(shù)據(jù)結(jié)構(gòu)超詳細(xì)筆記(收藏版)

    本文給大家介紹Java數(shù)據(jù)結(jié)構(gòu),包括數(shù)組、鏈表、List、Set、Map及迭代器,對(duì)比了其內(nèi)存特性、操作效率和應(yīng)用場(chǎng)景,并介紹了哈希及沖突解決方法,感興趣的朋友跟隨小編一起看看吧
    2025-09-09
  • java實(shí)現(xiàn)文件夾解壓和壓縮

    java實(shí)現(xiàn)文件夾解壓和壓縮

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)文件夾解壓和壓縮,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • springdata jpa單表操作crud的實(shí)例代碼詳解

    springdata jpa單表操作crud的實(shí)例代碼詳解

    這篇文章主要介紹了springdata jpa單表操作crud的實(shí)例代碼詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • 詳細(xì)易懂帶你了解Spring中的注解

    詳細(xì)易懂帶你了解Spring中的注解

    這篇文章主要介紹了詳細(xì)易懂帶你了解Spring中的注解,Spring的一個(gè)核心是IOC,是將Bean初始化加載到容器中,Bean是如何加載到容器的,可以使用Spring注解方式或者Spring XML配置方式,需要的朋友可以參考下
    2023-08-08
  • Java設(shè)計(jì)模式模板方法模式(Template)用法解析

    Java設(shè)計(jì)模式模板方法模式(Template)用法解析

    這篇文章主要介紹了Java設(shè)計(jì)模式模板方法模式(Template)用法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • java.lang.NoSuchMethodException: com.sun.proxy.$Proxy58.list錯(cuò)誤解決辦法

    java.lang.NoSuchMethodException: com.sun.proxy.$Proxy58.list

    這篇文章主要介紹了java.lang.NoSuchMethodException: com.sun.proxy.$Proxy58.list錯(cuò)誤解決辦法的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • Idea設(shè)置全局highlighting?level為Syntax問(wèn)題

    Idea設(shè)置全局highlighting?level為Syntax問(wèn)題

    這篇文章主要介紹了Idea設(shè)置全局highlighting?level為Syntax問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04

最新評(píng)論

双鸭山市| 玉溪市| 依安县| 安徽省| 德化县| 穆棱市| 澎湖县| 乌鲁木齐县| 常宁市| 徐闻县| 阜阳市| 南郑县| 东海县| 郁南县| 罗江县| 平湖市| 商水县| 东宁县| 齐齐哈尔市| 乌兰察布市| 贵州省| 库车县| 车险| 盖州市| 即墨市| 易门县| 乐至县| 临武县| 运城市| 高台县| 罗城| 永昌县| 榆中县| 宜城市| 丰镇市| 定西市| 梧州市| 文山县| 柞水县| 茂名市| 苗栗市|