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

淺談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)?,常見的方法如下?/p>

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

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

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

  • 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 幾種常見計(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 如下所示。如何編寫 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 Cloud Config對(duì)特殊字符加密處理的方法詳解

    Spring Cloud Config對(duì)特殊字符加密處理的方法詳解

    這篇文章主要給大家介紹了關(guān)于Spring Cloud Config對(duì)特殊字符加密處理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2018-05-05
  • 使用MyBatis-Generator如何自動(dòng)生成映射文件

    使用MyBatis-Generator如何自動(dòng)生成映射文件

    這篇文章主要介紹了使用MyBatis-Generator如何自動(dòng)生成映射文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 5分鐘快速了解String.trim()到底做了什么事

    5分鐘快速了解String.trim()到底做了什么事

    trim方法一般用來(lái)去除空格,但是根據(jù)JDK API的說(shuō)明,該方法并不僅僅是去除空格,它能夠去除從編碼'\u0000'至'\u0020'的所有字符,這篇文章主要給大家介紹了如何通過(guò)5分鐘快速了解String.trim()到底做了什么事,需要的朋友可以參考下
    2021-11-11
  • Java單元測(cè)試Powermockito和Mockito使用總結(jié)

    Java單元測(cè)試Powermockito和Mockito使用總結(jié)

    公司單元測(cè)試框架選用了Junit 4.12,Mock框架選用了Mockito和PowerMock,本文主要介紹了Java單元測(cè)試Powermockito和Mockito使用總結(jié),感興趣的可以了解一下
    2021-09-09
  • Spring實(shí)現(xiàn)文件上傳(示例代碼)

    Spring實(shí)現(xiàn)文件上傳(示例代碼)

    Spring可以繼承commons-fileupload插件來(lái)實(shí)現(xiàn)文件上傳的功能。分為前端JSP編寫和后臺(tái)Controller的編寫
    2013-10-10
  • MybatisPlus開啟二級(jí)緩存的方法詳解

    MybatisPlus開啟二級(jí)緩存的方法詳解

    這篇文章主要介紹了MybatisPlus開啟二級(jí)緩存的方法詳解,二級(jí)緩存是基于mapper文件的namespace級(jí)別,也就是說(shuō)多個(gè)sqlSession可以共享一個(gè)mapper中的二級(jí)緩存區(qū)域,需要的朋友可以參考下
    2023-11-11
  • 關(guān)于JVM默認(rèn)堆內(nèi)存大小問題

    關(guān)于JVM默認(rèn)堆內(nèi)存大小問題

    這篇文章主要介紹了關(guān)于JVM默認(rèn)堆內(nèi)存大小問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 解決eclipse啟動(dòng)tomcat時(shí)不能加載web項(xiàng)目的問題

    解決eclipse啟動(dòng)tomcat時(shí)不能加載web項(xiàng)目的問題

    這篇文章主要介紹了解決eclipse啟動(dòng)tomcat時(shí)不能加載web項(xiàng)目的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java實(shí)現(xiàn)鏈棧的示例代碼

    Java實(shí)現(xiàn)鏈棧的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何使用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)來(lái)實(shí)現(xiàn)棧,也就是鏈棧的實(shí)現(xiàn),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-11-11
  • Java中的ObjectOutputStream類使用

    Java中的ObjectOutputStream類使用

    ObjectOutputStream是Java.io包中的一個(gè)類,用于將Java對(duì)象的狀態(tài)信息序列化為字節(jié)流,序列化是將對(duì)象狀態(tài)轉(zhuǎn)換為字節(jié)流的過(guò)程,反序列化則是將字節(jié)流恢復(fù)為對(duì)象,本文介紹了ObjectOutputStream的原理、主要方法、使用步驟以及注意事項(xiàng)
    2024-09-09

最新評(píng)論