亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java.math.BigDecimal的用法及加減乘除計(jì)算

 更新時(shí)間:2023年05月29日 11:03:16   作者:隨波逐流baby  
這篇文章主要介紹了java.math.BigDecimal的用法及加減乘除計(jì)算,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

java.math.BigDecimal及加減乘除計(jì)算

BigDecimal簡(jiǎn)介

  • BigDecimal用來對(duì)需要更大或更小的數(shù)進(jìn)行任意精度的運(yùn)算。
  • 在需要精確的小數(shù)計(jì)算時(shí)再使用BigDecimal,BigDecimal的性能比double和float差,在處理龐大,復(fù)雜的運(yùn)算時(shí)尤為明顯。故一般精度的計(jì)算沒必要使用BigDecimal。
  • 盡量使用參數(shù)類型為String的構(gòu)造函數(shù)。
  • BigDecimal都是不可變的(immutable)的, 在進(jìn)行每一次四則運(yùn)算時(shí),都會(huì)產(chǎn)生一個(gè)新的對(duì)象 ,所以在做加減乘除運(yùn)算時(shí)要記得要保存操作后的值。

BigDecimal構(gòu)造方法

  • BigDecimal(BigInteger val)

將 BigInteger轉(zhuǎn)換成 BigDecimal

  • BigDecimal(char[] in)

一個(gè)轉(zhuǎn)換的字符數(shù)組表示 BigDecimal成 BigDecimal ,接受字符作為的相同序列 BigDecimal(String)構(gòu)造

  • BigDecimal(double val)

將 double轉(zhuǎn)換為 BigDecimal ,這是 double的二進(jìn)制浮點(diǎn)值的精確十進(jìn)制表示

  • BigDecimal(int val)

將 int成 BigDecimal

  • BigDecimal(long val)

將 long成 BigDecimal

  • BigDecimal(String val)

將BigDecimal的字符串表示 BigDecimal轉(zhuǎn)換為 BigDecimal

BigDecimal 常用方法 加減乘除運(yùn)算

BigDecimal a = new BigDecimal(6);
BigDecimal b = new BigDecimal(5);
a.add(b); ?//a+b ?加
a.subtract(b); // a-b 減
a.multiply(b); // a*b 乘
a.divide(b);// a/b 除
a.doubleValue();//轉(zhuǎn)換成雙精度 double類型
a.floatValue(); //轉(zhuǎn)換成單精度 float類型
a.longValue(); //轉(zhuǎn)換成長(zhǎng)整形 long 類型
a.intValue(); ?//轉(zhuǎn)換成整形 int 類型
a.pow(3);//a的3次方
a.abs();//a的絕對(duì)值
a.negate();//a的負(fù)數(shù)

BigDecimal數(shù)值比較

BigDecimal a = new BigDecimal(6);
int i = a.compareTo(BigDecimal.ZERO); //和0做比較
i==-1;//表示a小于0
i==0;//表示a=0
i==1;//表示a大于0
boolean b1 = a.subtract(b).compareTo(BigDecimal.ZERO) > 0;//判斷a-b是否大于0

BigDecimal常見異常

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result。

原因:

JAVA中如果用BigDecimal做除法的時(shí)候一定要在divide方法中傳遞第二個(gè)參數(shù),定義精確到小數(shù)點(diǎn)后幾位,否則在不整除的情況下,結(jié)果是無限循環(huán)小數(shù)時(shí),就會(huì)拋出以上異常。

解決辦法:

a.divide(b,4,RoundingMode.HALF_UP));

第二個(gè)參數(shù)是保留小數(shù)位數(shù)

第三個(gè)代表模式

模式:

  • ROUND_UP 始終對(duì)前一位加1 只入不舍
  • ROUND_DOWN 始終不對(duì)小數(shù)進(jìn)行改變 只舍不入
  • ROUND_CEILING 如果 BigDecimal 為正,則舍入行為與 ROUND_UP 相同;如果為負(fù),則舍入行為與 ROUND_DOWN 相同。
  • ROUND_FLOOR如果 BigDecimal 為正,則舍入行為與 ROUND_DOWN 相同;如果為負(fù),則舍入行為與 ROUND_UP 相同。
  • ROUND_HALF_UP 四舍五入
  • ROUND_HALF_DOWN 五舍六入
  • ROUND_HALF_EVEN 如果舍棄部分左邊的數(shù)字為奇數(shù),則舍入行為與 ROUND_HALF_UP 相同;如果為偶數(shù),則舍入行為與 ROUND_HALF_DOWN 相同。

心得

BigDecimal 主要用來操作(大)浮點(diǎn)數(shù),BigInteger 主要用來操作大整數(shù)(超過 long 類型)。

BigDecimal 的實(shí)現(xiàn)利用到了 BigInteger, 所不同的是 BigDecimal 加入了小數(shù)位的概念。

java.math.BigDecimal 比較大小

BigDecimal a = new BigDecimal (101);
BigDecimal b = new BigDecimal (111);
//使用compareTo方法比較
//注意:a、b均不能為null,否則會(huì)報(bào)空指針
if(a.compareTo(b) == -1){
    System.out.println("a小于b");
}
if(a.compareTo(b) == 0){
    System.out.println("a等于b");
}
if(a.compareTo(b) == 1){
    System.out.println("a大于b");
}
if(a.compareTo(b) > -1){
    System.out.println("a大于等于b");
}
if(a.compareTo(b) < 1){
    System.out.println("a小于等于b");
}

總結(jié)

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

相關(guān)文章

  • Java編寫通用的導(dǎo)出任何對(duì)象列表數(shù)據(jù)到excel的工具類

    Java編寫通用的導(dǎo)出任何對(duì)象列表數(shù)據(jù)到excel的工具類

    在工作中經(jīng)常會(huì)遇到列表數(shù)據(jù)的導(dǎo)出,每次需要的時(shí)候都要去開發(fā)一次,且數(shù)據(jù)不斷在變化,所以本文將利用Java編寫一個(gè)工具類可以導(dǎo)出任何對(duì)象列表數(shù)據(jù)到excel,希望對(duì)大家有所幫助
    2024-12-12
  • Spring MVC注解式開發(fā)示例完整過程

    Spring MVC注解式開發(fā)示例完整過程

    這篇文章主要介紹了Spring MVC注解式開發(fā)示例完整過程,MVC注解式開發(fā)即處理器基于注解的類開發(fā),對(duì)于每一個(gè)定義的處理器,無需在xml中注冊(cè),只需在代碼中通過對(duì)類與方法的注解,即可完成注冊(cè)
    2023-02-02
  • Sentinel熔斷規(guī)則原理示例詳解分析

    Sentinel熔斷規(guī)則原理示例詳解分析

    這篇文章主要介紹了Sentinel熔斷規(guī)則,采用了示例代碼的方式對(duì)Sentinel熔斷規(guī)則進(jìn)行了詳細(xì)的分析,以便廣大讀者朋友們更易理解,有需要的朋友可以參考下
    2021-09-09
  • Java RabbitMQ 中的消息長(zhǎng)期不消費(fèi)會(huì)過期嗎

    Java RabbitMQ 中的消息長(zhǎng)期不消費(fèi)會(huì)過期嗎

    RabbitMQ支持消息的過期時(shí)間,在消息發(fā)送時(shí)可以進(jìn)行指定。 RabbitMQ支持隊(duì)列的過期時(shí)間,從消息入隊(duì)列開始計(jì)算,只要超過了隊(duì)列的超時(shí)時(shí)間配置,那么消息會(huì)自動(dòng)的清除
    2021-09-09
  • 深入理解java代碼實(shí)現(xiàn)分治算法

    深入理解java代碼實(shí)現(xiàn)分治算法

    分治算法是一種遞歸算法,它將問題劃分為幾個(gè)獨(dú)立的子問題,然后遞歸地解決這些子問題,最后將子問題的解合并起來得到原問題的解,本文詳細(xì)的介紹java分治算法,感興趣的可以了解一下
    2023-09-09
  • 深入Java Final

    深入Java Final

    本篇文章,小編將為大家介紹Java Final,有需要的朋友可以參考一下
    2013-04-04
  • 一文詳解Java中多進(jìn)程與多線程處理

    一文詳解Java中多進(jìn)程與多線程處理

    在Java編程中,多進(jìn)程和多線程是兩種常見的并發(fā)編程技術(shù),用于提高程序的執(zhí)行效率和響應(yīng)速度,本文將為大家簡(jiǎn)單介紹一下多進(jìn)程與多線程處理的相關(guān)知識(shí),希望對(duì)大家有所幫助
    2025-01-01
  • RocketMQ消息發(fā)送與消息類別詳解

    RocketMQ消息發(fā)送與消息類別詳解

    這篇文章主要介紹了RocketMQ消息發(fā)送與消息類別詳解,事務(wù)消息的生產(chǎn)者執(zhí)行本地事務(wù),并根據(jù)事務(wù)執(zhí)行的結(jié)果選擇是否提交或回滾事務(wù),
    如果事務(wù)執(zhí)行成功并選擇提交事務(wù),則產(chǎn)生注冊(cè)成功消息,進(jìn)入下一步,需要的朋友可以參考下
    2023-09-09
  • 深入淺析Spring-boot-starter常用依賴模塊

    深入淺析Spring-boot-starter常用依賴模塊

    這篇文章主要介紹了Spring-boot-starter常用依賴模塊及spring boot的兩大優(yōu)點(diǎn),需要的朋友可以參考下
    2018-01-01
  • Nacos心跳時(shí)間配置及服務(wù)快速上下線方式

    Nacos心跳時(shí)間配置及服務(wù)快速上下線方式

    這篇文章主要介紹了Nacos心跳時(shí)間配置及服務(wù)快速上下線方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評(píng)論