Java大数字运算
在 Java 中提供了用于大數(shù)字運(yùn)算的類(lèi),即 java.math.BigInteger 類(lèi)和 java.math.BigDecimal 類(lèi)。這兩個(gè)類(lèi)用于高精度計(jì)算,其中 BigInteger 類(lèi)是針對(duì)整型大數(shù)字的處理類(lèi),而 BigDecimal 類(lèi)是針對(duì)大小數(shù)的處理類(lèi)。
BigInteger 類(lèi)
如果要存儲(chǔ)比 Integer 更大的數(shù)字,Integer 數(shù)據(jù)類(lèi)型就無(wú)能為力了。因此,Java 中提供 BigInteger 類(lèi)來(lái)處理更大的數(shù)字。
BigInteger 類(lèi)型的數(shù)字范圍較 Integer 類(lèi)型的數(shù)字范圍要大得多。BigInteger 支持任意精度的整數(shù),也就是說(shuō)在運(yùn)算中 BigInteger 類(lèi)型可以準(zhǔn)確地表示任何大小的整數(shù)值。
除了基本的加、減、乘、除操作之外,BigInteger 類(lèi)還封裝了很多操作,像求絕對(duì)值、相反數(shù)、最大公約數(shù)以及判斷是否為質(zhì)數(shù)等。
要使用 BigInteger 類(lèi),首先要?jiǎng)?chuàng)建一個(gè) BigInteger 對(duì)象。BigInteger 類(lèi)提供了很多種構(gòu)造方法,其中最直接的一種是參數(shù)以字符串形式代表要處理的數(shù)字。這個(gè)方法語(yǔ)法格式如下:
BigInteger(String val)這里的 val 是數(shù)字十進(jìn)制的字符串。例如,要將數(shù)字 5 轉(zhuǎn)換為 BigInteger 對(duì)象,語(yǔ)句如下:
BigInteger bi = new BigInteger("5")注意:這里數(shù)字 5 的雙引號(hào)是必需的,因?yàn)?BigInteger 類(lèi)構(gòu)造方法要求參數(shù)是字符串類(lèi)型。
創(chuàng)建 BigInteger 對(duì)象之后,便可以調(diào)用 BigInteger 類(lèi)提供的方法進(jìn)行各種數(shù)學(xué)運(yùn)算操作,BigInteger 類(lèi)的常用運(yùn)算方法。
將用戶(hù)輸入的數(shù)字作為 BigInteger 對(duì)象,然后調(diào)用該對(duì)象的各種方法實(shí)現(xiàn)加、減、乘、除和其他運(yùn)算,并輸出結(jié)果。代碼如下:
將用戶(hù)輸入的整型數(shù)字保存到 num 變量中,由于 BigInteger 類(lèi)的構(gòu)造方法只接收字符串類(lèi)型的參數(shù),所以使用“new BigInteger(num+"")”代碼來(lái)創(chuàng)建 BigInteger 對(duì)象。調(diào)用 BigInteger 類(lèi)提供的運(yùn)算方法,運(yùn)行效果下所示。
請(qǐng)輸入一個(gè)整型數(shù)字: 125 加法操作結(jié)果:224 減法操作結(jié)果:100 乘法橾作結(jié)果:375 除法操作結(jié)果:62 取商操作結(jié)果:41 取余操作結(jié)果:2 取 2 次方操作結(jié)果:15625 取相反數(shù)操作結(jié)果:-125BigDecimal 類(lèi)
BigInteger 和 BigDecimal 都能實(shí)現(xiàn)大數(shù)字的運(yùn)算,不同的是 BigDecimal 加入了小數(shù)的概念。一般的 float 和 double 類(lèi)型數(shù)據(jù)只能用來(lái)做科學(xué)計(jì)算或工程計(jì)算,但由于在商業(yè)計(jì)算中要求數(shù)字精度比較高,所以要用到 BigDecimal 類(lèi)。BigDecimal 類(lèi)支持任何精度的浮點(diǎn)數(shù),可以用來(lái)精確計(jì)算貨幣值。
BigDecimal 常用的構(gòu)造方法如下。
BigDecimal(double val):實(shí)例化時(shí)將雙精度型轉(zhuǎn)換為 BigDecimal 類(lèi)型。BigDecimal(String val):實(shí)例化時(shí)將字符串形式轉(zhuǎn)換為 BigDecimal 類(lèi)型。BigDecimal 類(lèi)的方法可以用來(lái)做超大浮點(diǎn)數(shù)的運(yùn)算,像加、減、乘和除等。在所有運(yùn)算中,除法運(yùn)算是最復(fù)雜的,因?yàn)樵诔槐M的情況下,末位小數(shù)的處理方式是需要考慮的。
下面列出了 BigDecimal 類(lèi)用于實(shí)現(xiàn)加、減、乘和除運(yùn)算的方法。
BigDecimal add(BigDecimal augend) // 加法操作BigDecimal subtract(BigDecimal subtrahend) // 減法操作BigDecimal multiply(BigDecimal multiplieand) // 乘法操作BigDecimal divide(BigDecimal divisor,int scale,int roundingMode ) // 除法操作其中,divide() 方法的 3 個(gè)參數(shù)分別表示除數(shù)、商的小數(shù)點(diǎn)后的位數(shù)和近似值處理模式。
roundingMode 參數(shù)支持的處理模式。
使用 BigDecimal 類(lèi)提供的方法對(duì)數(shù)字執(zhí)行運(yùn)算,并輸出結(jié)果。代碼如下:
import java.math.BigDecimal; import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("請(qǐng)輸入一個(gè)數(shù)字:");// 保存用戶(hù)輸入的數(shù)字double num = input.nextDouble();// 使用輸入的數(shù)字創(chuàng)建BigDecimal對(duì)象BigDecimal bd = new BigDecimal(num);// 計(jì)算大數(shù)字加上99.154的結(jié)果System.out.println("加法操作結(jié)果:" + bd.add(new BigDecimal(99.154)));// 計(jì)算大數(shù)字減去-25.157904的結(jié)果System.out.println("減法操作結(jié)果:" + bd.subtract(new BigDecimal(-25.157904)));// 計(jì)算大數(shù)字乘以3.5的結(jié)果System.out.println("乘法操作結(jié)果:" + bd.multiply(new BigDecimal(3.5)));// 計(jì)算大數(shù)字除以3.14的結(jié)果,并保留小數(shù)后2位System.out.println("除法操作結(jié)果(保留 2 位小數(shù)):" + bd.divide(new BigDecimal(3.14), 2, BigDecimal.ROUND_CEILING));// 計(jì)算大數(shù)字除以3.14的結(jié)果,并保留小數(shù)后5位System.out.println("除法操作結(jié)果(保留 5 位小數(shù)):" + bd.divide(new BigDecimal(3.14), 5, BigDecimal.ROUND_CEILING));} }上述代碼將用戶(hù)輸入的數(shù)字保存到 num 變量中,然后調(diào)用“newBigDecimal(num)”方法來(lái)創(chuàng)建 BigDecimal 對(duì)象。調(diào)用 BigDecimal 類(lèi)提供的運(yùn)算方法,運(yùn)行效果如下所示。
請(qǐng)輸入一個(gè)數(shù)字: 100 加法操作結(jié)果:199.15399999999999636202119290828704833984375 減法操作結(jié)果:125.157903999999998490011421381495893001556396484375 乘法操作結(jié)果:350.0 除法操作結(jié)果(保留 2 位小數(shù)):31.85 除法操作結(jié)果(保留 5 位小數(shù)):31.84714 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
- 上一篇: Redis有序集合详解
- 下一篇: Java 在链表的开头和结尾添加元素