JAVA 中的大數(shù)字操作類詳解
字符串表示大數(shù)字, "123456789123456789123456789123456789123456789"
(1)java.math.BigInteger 大整數(shù)操作類
(2)java.math.BigDecimal 大小數(shù)操作類
這兩個(gè)類和 Java 中的表示數(shù)字的基本數(shù)據(jù)類型的包裝類(Byte、Short、Integer、Long、 Double、Float)都是繼承自 Number,即 Number 類的子類。
大整數(shù)操作類:BigInteger 概述
BigInteger 是一個(gè)用于表示任意精度整數(shù)的類。它可以處理僅在 int 或 long 范圍內(nèi)的整數(shù)運(yùn)算以及超出這些范圍的整數(shù)。
主要特點(diǎn)
(1)精度:不受 int 和 long 限制,可以處理非常大的整數(shù)。
(2)不支持小數(shù):只能表示整數(shù)。
(3)所有操作(加法、減法、乘法、除法等)都通過(guò)方法實(shí)現(xiàn),不能直接使用運(yùn)算符。
使用場(chǎng)景
(1)計(jì)算大數(shù)的結(jié)果(如科學(xué)計(jì)算、密碼學(xué)等)。
(2)需要精確的整數(shù)計(jì)算(如金融、統(tǒng)計(jì)分析等)。
(3)需要處理大范圍數(shù)值的算法(如大數(shù)運(yùn)算、階乘計(jì)算等)。
大整數(shù)操作類:BigInteger 可以操作無(wú)限大的整型數(shù)據(jù)。
構(gòu)造器
對(duì)于 BigInteger 類有很多個(gè)構(gòu)造器,但是最常用的就是有一個(gè) String 類型參數(shù)的構(gòu)造器:
public BigInteger(String val) {
this(val, 10);
}常用方法
(1)BigInteger add(BigInteger val)
加法操作;
(2)BigInteger subtract(BigInteger val)
減法操作;
(3)BigInteger multiply(BigInteger val)
乘法操作;
(4)BigInteger divide(BigInteger val)
除法操作(不保留小數(shù)部分);
(5)BigInteger[] divideAndRemainder(BigInteger val)
除法操作,返回值是一個(gè)長(zhǎng)度為 2 的數(shù)組,數(shù)組中的第一個(gè)元素表示商,數(shù)組中第二個(gè)元素表示余 數(shù)。
示例:
import java.math.BigInteger;
public class Test {
public static void main(String[] args) {
BigInteger bigInteger1 = new BigInteger("123456789123456789123456789123456789123456789");
BigInteger bigInteger2 = new BigInteger("123456789123456789123456789123456789123456789");
System.out.println(bigInteger1);
System.out.println(bigInteger2);
// 加法
BigInteger plus = bigInteger1.add(bigInteger2);
// 減法
BigInteger subtract = bigInteger1.subtract(bigInteger2);
// 乘法
BigInteger multiply = bigInteger1.multiply(bigInteger2);
// 除法
BigInteger divide = bigInteger1.divide(bigInteger2);
System.out.println(plus);
System.out.println(subtract);
System.out.println(multiply);
System.out.println(divide);
}
}打印結(jié)果:

大小數(shù)操作類:BigDecimal
概述
BigDecimal 是一個(gè)用于表示任意精度的浮點(diǎn)數(shù)的類。它具有控制小數(shù)位數(shù)和舍入策略的功能。
主要特點(diǎn)
(1)精度高,不會(huì)受到 float 和 double 的限制,適用于需要精確表示小數(shù)點(diǎn)數(shù)據(jù)的場(chǎng)景。
(2)支持控制小數(shù)點(diǎn)后的位數(shù)及舍入方式。
(3)通過(guò)方法實(shí)現(xiàn)計(jì)算,不能直接使用運(yùn)算符。
使用場(chǎng)景
(1)金融計(jì)算:涉及到貨幣或者利息計(jì)算時(shí),確保不會(huì)因?yàn)楦↑c(diǎn)數(shù)運(yùn)算導(dǎo)致的精度損失。
(2)科學(xué)計(jì)算:需要更高精度的小數(shù)計(jì)算。
(3)需要高精度結(jié)果的任何應(yīng)用(如價(jià)格計(jì)算、統(tǒng)計(jì)數(shù)據(jù)處理中)。
構(gòu)造器
BigDecimal(String val) 創(chuàng)建一個(gè)表示字符串參數(shù) val 的 BigDecimal 類型的大小數(shù)對(duì)象。
常用方法
(1)BigDecimal add(BigDecimal augend) 加法操作;
(2)BigDecimal subtract(BigDecimal subtrahend) 減法操作;
(3)BigDecimal multiply(BigDecimal multiplicand) 乘法操作;
(4)BigDecimal divide(BigDecimal divisor) 除法操作,如果除不盡,則會(huì)報(bào) java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result;
(5)BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) 除法操作,可以設(shè)置結(jié)果保留的小數(shù)的位數(shù)以及進(jìn)位模式,scale 參數(shù)表示保留的小數(shù)位數(shù), roundingMode 參數(shù)表示進(jìn)位模式。BigDecimal 類中定義多個(gè)靜態(tài)常量表示進(jìn)位模式, ROUND_HALF_UP 這個(gè)靜態(tài)常量就表示四舍五入。
示例:
import java.math.BigDecimal;
public class Test {
public static void main(String[] args) {
BigDecimal bigDecimal1 = new BigDecimal("123456789123456789123456789123456789123456789.123456789123456789123456789123456789123456789");
BigDecimal bigDecimal2 = new BigDecimal("123456789123456789123456789123456789123456789.123456789123456789123456789123456789123456789");
System.out.println(bigDecimal1);
System.out.println(bigDecimal2);
// 加法
BigDecimal plus = bigDecimal1.add(bigDecimal2);
// 減法
BigDecimal subtract = bigDecimal1.subtract(bigDecimal2);
// 乘法
BigDecimal multiply = bigDecimal1.multiply(bigDecimal2);
// 除法
BigDecimal divide = bigDecimal1.divide(bigDecimal2);
System.out.println(plus);
System.out.println(subtract);
// 0E-45 是一個(gè)科學(xué)計(jì)數(shù)法的表示方式,表示的是非??拷诹愕臄?shù)。此處的E-45是表示小數(shù)點(diǎn)位置,雖然數(shù)字為零,但由于內(nèi)部存儲(chǔ)的計(jì)算精度導(dǎo)致了這樣的表示。
// 修改輸出格式以普通數(shù)字顯示
System.out.println(subtract.stripTrailingZeros().toPlainString());
System.out.println(multiply);
System.out.println(divide);
}
}打印結(jié)果:

定義聲明一個(gè)方法,可以對(duì) double 類型的小數(shù)進(jìn)行四舍五入的操作
示例:
import java.math.BigDecimal;
public class Test {
public static void main(String[] args) {
double i = 3.1415926;
System.out.println(round(i,2));
}
/**
*
* @param num 傳入的 double 類型的數(shù)據(jù)
* @param scale 保留位數(shù)
* @return
*/
public static double round(double num,int scale) {
BigDecimal decimal = new BigDecimal(num);
//進(jìn)行除法操作,除以 1 來(lái)控制結(jié)果保留多少位小數(shù)
BigDecimal result =
decimal.divide(new BigDecimal(1), scale, BigDecimal.ROUND_HALF_UP);
//把 BigDecimal 類型的結(jié)果轉(zhuǎn)換為 double 類型返回
return result.doubleValue();
}
}打印結(jié)果:

到此這篇關(guān)于JAVA 中的大數(shù)字操作類的文章就介紹到這了,更多相關(guān)java大數(shù)字操作類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot整合JWT的實(shí)現(xiàn)示例
JWT是目前比較流行的跨域認(rèn)證解決方案,本文主要介紹了SpringBoot整合JWT的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
IDEA中l(wèi)og4j 無(wú)法輸出到本地 properties配置無(wú)效問(wèn)題
這篇文章主要介紹了IDEA中l(wèi)og4j 無(wú)法輸出到本地 properties配置無(wú)效問(wèn)題,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10
Java?數(shù)據(jù)結(jié)構(gòu)與算法系列精講之隊(duì)列
這篇文章主要介紹了Java隊(duì)列數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn),隊(duì)列是一種特殊的線性表,只允許在表的隊(duì)頭進(jìn)行刪除操作,在表的后端進(jìn)行插入操作,隊(duì)列是一個(gè)有序表先進(jìn)先出,想了解更多相關(guān)資料的小伙伴可以參考下面文章的詳細(xì)內(nèi)容2022-02-02
關(guān)于String.format()格式化輸出方式
String.format()是Java的格式化輸出方法,支持多種數(shù)據(jù)類型和格式化選項(xiàng),它在格式化和拼接字符串時(shí)具有較高的靈活性,但效率相對(duì)較低,特別是在處理大量數(shù)據(jù)時(shí),在實(shí)際編程中,應(yīng)根據(jù)具體需求選擇合適的字符串拼接方式2024-12-12
SpringBoot項(xiàng)目集成依賴Mybatis步驟
在本篇文章中小編給大家分享了關(guān)于SpringBoot項(xiàng)目如何集成依賴Mybatis的相關(guān)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們學(xué)習(xí)下。2019-06-06
Java實(shí)現(xiàn)計(jì)算圖中兩個(gè)頂點(diǎn)的所有路徑
這篇文章主要為大家詳細(xì)介紹了如何利用Java語(yǔ)言實(shí)現(xiàn)計(jì)算圖中兩個(gè)頂點(diǎn)的所有路徑功能,文中通過(guò)示例詳細(xì)講解了實(shí)現(xiàn)的方法,需要的可以參考一下2022-10-10
IntelliJ IDEA 使用經(jīng)驗(yàn)總結(jié)(推薦)
這篇文章主要介紹了IntelliJ IDEA 使用經(jīng)驗(yàn)總結(jié),非常不錯(cuò),具有參考價(jià)值,需要的朋友可以參考下2018-02-02

