亚洲 国产精品 日韩-亚洲 激情-亚洲 欧美 91-亚洲 欧美 成人日韩-青青青草视频在线观看-青青青草影院

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > 大數(shù)字處理相關的類有哪些?

大數(shù)字處理相關的類有哪些?

來源:千鋒教育
發(fā)布人:zyh
時間: 2023-06-13 17:15:00 1686647700

  全文大約【3800】字,不說廢話,只講可以讓你學到技術、明白原理的純干貨!本文帶有豐富的案例及配圖視頻,讓你更好地理解和運用文中的技術概念,并可以給你帶來具有足夠啟迪的思考......

大數(shù)字處理相關的類有哪些

  一. BigInteger類

  1.簡介

  小編在之前給大家講解8種基本類型時就說過,不同的數(shù)據(jù)類型,有不同的取值范圍,我們再通過下表回顧一下:

1683539185494.image

  從上表中我們可以看到,整型的最大取值范圍是-2^63 ~ 2^63-1,浮點型的最大取值范圍是±1.7E+308。但是不管這個范圍有多大,有些小伙伴就想杠一下,如果我就要存一個比Integer或Long更大的數(shù)字,怎么辦?

  針對這種大整數(shù)的需求,我們可以使用BigInteger,它的數(shù)字范圍比 Integer類型的數(shù)字范圍要大得多,而且BigInteger支持任意精度的整數(shù)。也就是說在運算中,BigInteger類型可以準確地表示任何大小的整數(shù)值。BigInteger和Integer、Long一樣都是Number的子類,屬于不可變類。它自身帶有一些可以進行運算的方法,包括基本的加、減、乘、除操作,還有很多較為高級的操作,像求絕對值、相反數(shù)、最大公約數(shù)及判斷是否為質(zhì)數(shù)等,所以BigInteger用起來是比較方便的。

  2. 使用方法

  2.1 常用API方法

  如果我們要使用BigInteger類,首先要創(chuàng)建一個BigInteger對象。BigInteger類提供了多個構造方法,其中最直接的一個是以字符串作為參數(shù)的構造方法,即BigInteger(String val)。在創(chuàng)建BigInteger對象之后,我們就可以調(diào)用BigInteger類提供的方法,進行各種數(shù)學運算了,這些常用的API方法如下:

1683539219274.image

  2.2 基本案例

  我們先來通過一個案例,來驗證一下BigInteger中的數(shù)字到底有多大。  

public static void main(String[] args) {
//創(chuàng)建一個BigInteger對象
BigInteger bi = new BigInteger("1234567890");
//計算1234567890的15次方,
//結(jié)果=23589821655914838120947036369147203948318169938519404175968425823418008249115809912616071588527110255905622789563711716349000000000000000
System.out.println(bi.pow(15));
}

  我們會發(fā)現(xiàn),BigInteger可以表示一個非常大的數(shù)字,比Integer、Long的范圍都要大。

  2.3 類型轉(zhuǎn)換

  小編在上面說過,BigInteger其實是Number的子類,我們知道,Number中定義了幾個負責類型轉(zhuǎn)換的方法,比如:

  ● 轉(zhuǎn)換為byte:byteValue()

  ● 轉(zhuǎn)換為short:shortValue()

  ● 轉(zhuǎn)換為int:intValue()

  ● 轉(zhuǎn)換為long:longValue()

  ● 轉(zhuǎn)換為float:floatValue()

  ● 轉(zhuǎn)換為double:doubleValue()

  我們利用上述幾個方法,就可以把BigInteger轉(zhuǎn)換成基本類型。但是大家要注意,如果BigInteger表示的范圍超過了基本類型的范圍,在轉(zhuǎn)換時會丟失高位信息,也就是說,結(jié)果不一定準確。所以如果我們需要準確地轉(zhuǎn)換成基本類型,可以使用intValueExact()、longValueExact()這樣的方法。不過這種方法在轉(zhuǎn)換時如果超出了基本類型的范圍,會直接拋出ArithmeticException異常。我們來驗證一下吧。  

public static void main(String[] args) {
//BigInteger轉(zhuǎn)基本類型
BigInteger bi02 = new BigInteger("123456789000");
//123456789000
System.out.println("轉(zhuǎn)為int類型="+bi02.intValue());
System.out.println("轉(zhuǎn)為float類型="+bi02.floatValue());
System.out.println("轉(zhuǎn)為long類型="+bi02.longValue());

//將123456789000乘以123456789000,然后將結(jié)果轉(zhuǎn)為long類型
//java.lang.ArithmeticException: BigInteger out of long range
System.out.println("得到精確結(jié)果="+bi02.multiply(bi02).longValueExact());
}

  但是如果BigInteger的值超過了float的最大范圍(3.4x1038),結(jié)果并不會出現(xiàn)ArithmeticException異常,而是會出現(xiàn)Infinity,如下所示: 

//計算999999的99次方,并得到該結(jié)果的float值
BigInteger bi03 = new BigInteger("999999").pow(99);
float f = bi03.floatValue();
System.out.println("結(jié)果="+f);

  2.4 其他用法

  接下來我們再來看看其他的API方法都有哪些作用。  

import java.math.BigInteger;
import java.util.Scanner;

public class Demo10 {

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入一個整數(shù):");
// 保存用戶輸入的數(shù)字
int num = scanner.nextInt();

// 使用輸入的數(shù)字創(chuàng)建BigInteger對象
BigInteger bi = new BigInteger(num + "");
// 計算大數(shù)字加上99的結(jié)果
System.out.println("加法的結(jié)果:" + bi.add(new BigInteger("99")));
// 計算大數(shù)字減去25的結(jié)果
System.out.println("減法的結(jié)果:" + bi.subtract(new BigInteger("25")));
// 計算大數(shù)字乘以3的結(jié)果
System.out.println("乘法的結(jié)果:" + bi.multiply(new BigInteger("3")));
// 計算大數(shù)字除以2的結(jié)果
System.out.println("除法的結(jié)果:" + bi.divide(new BigInteger("2")));
// 計算大數(shù)字除以3的商
System.out.println("取商的結(jié)果:" + bi.divideAndRemainder(new BigInteger("3"))[0]);
// 計算大數(shù)字除以3的余數(shù)
System.out.println("取余的結(jié)果:" + bi.divideAndRemainder(new BigInteger("3"))[1]);
// 計算大數(shù)字的4次方
System.out.println("4次方的結(jié)果:" + bi.pow(4));
// 計算大數(shù)字的相反數(shù)
System.out.println("取反的結(jié)果:" + bi.negate());
}

}

  在上述案例中,我們將用戶輸入的數(shù)字作為 BigInteger 對象的參數(shù),然后調(diào)用該對象的各種方法,實現(xiàn)了加、減、乘、除等運算,并輸出了最終的結(jié)果。

  二. BigDecimal類

  1.簡介

  雖然都是用于大數(shù)字運算的類,但BigDecimal加入了小數(shù)的概念,所以是可以操作小數(shù)的。而float 和 double類型,只能用來進行科學計算或工程計算,并不適用于精度要求較高的商業(yè)計算(如貨幣計算),所以要用到支持任何精度的BigDecimal類。該類中提供了一系列對應的方法,可以用來做超大浮點數(shù)的運算,像加、減、乘和除等。在所有運算中,除法運算是最復雜的,因為存在除不盡的情況,需要我們考慮末位小數(shù)的處理方式。

  2.使用方法

  2.1 常用構造方法

  以下是BigDecimal類的常用構造方法:

  ● BigDecimal(double val):實例化對象時可以將雙精度型轉(zhuǎn)換為BigDecimal類型;

  ● BigDecimal(String val):實例化對象時可以將字符串形式轉(zhuǎn)換為BigDecimal類型。

  2.2 常用API方法

  除了構造方法之外,BigDecimal還提供了一些常用的API方法供我們進行數(shù)學運算。這些方法與BigInteger的方法類型,很多方法名稱和用法也都與之一致,所以這里小編就不再一一列出了,接下來我就直接通過一個案例給大家演示這些方法如何使用。 

import java.math.BigDecimal;

public class Demo11 {

public static void main(String[] args) {
BigDecimal bd = new BigDecimal("1000.05800");
// 計算大數(shù)字加上99的結(jié)果
System.out.println("加法的結(jié)果:" + bd.add(new BigDecimal("99")));
// 計算大數(shù)字減去25的結(jié)果
System.out.println("減法的結(jié)果:" + bd.subtract(new BigDecimal("25")));
// 計算大數(shù)字乘以1000的結(jié)果
System.out.println("乘法的結(jié)果:" + bd.multiply(new BigDecimal(1000)));

//獲取小數(shù)的位數(shù),5
System.out.println(bd.scale());

//去掉BigDecimal末尾的0,返回一個與原有BigDecimal相等的新對象
BigDecimal bd2 = bd.stripTrailingZeros();
System.out.println(bd2.scale());
}

}

  在上述代碼中,stripTrailingZeros()方法用于去掉BigDecimal末尾的0,并返回一個與原有BigDecimal相等的新對象。而scale()方法用于獲取一個數(shù)字后面0的個數(shù),如果返回的是負數(shù),比如-2,則表示該數(shù)是一個整數(shù),且末尾有2個0。

  2.3 divide()除法

  BigDecimal進行加、減、乘時,數(shù)字的精度不會丟失,但是進行除法運算時,有可能會出現(xiàn)無法除盡的情況,此時必須指定精度以及如何進行截斷。BigDecimal給我們提供了divide()和divideAndRemainder()兩個方法可以進行除法運算。

  其中,divide()方法有3個參數(shù)分別表示除數(shù)、商的小數(shù)點后的位數(shù)和近似值的處理模式,下表是小編給大家列出的roundingMode參數(shù)支持的處理模式。

1683539368691.image  

import java.math.BigDecimal;
import java.math.RoundingMode;

public class Demo12 {

public static void main(String[] args) {
BigDecimal d1 = new BigDecimal("123.456");
BigDecimal d2 = new BigDecimal("123.456789");

// 會產(chǎn)生ArithmeticException異常,因為除不盡,可以設置RoundingMode,按照指定的方法進行四舍五入或者直接截斷:
//BigDecimal d3 = d1.divide(d2);

// 保留10位小數(shù)并四舍五入
BigDecimal d4 = d1.divide(d2, 10, RoundingMode.HALF_UP);
System.out.println("d4="+d4);
//按指定的位數(shù)直接截斷,0.xxxx
BigDecimal d5 = d1.divide(d2, 4, RoundingMode.DOWN);
System.out.println("d5="+d5);
}
}

   2.4 divideAndRemainder()除法

  而divideAndRemainder()方法,會返回一個數(shù)組,內(nèi)部包含兩個BigDecimal,分別是商和余數(shù),其中商總是整數(shù),余數(shù)不會大于除數(shù),所以我們可以利用這個方法來判斷兩個BigDecimal是否是整數(shù)倍數(shù)。 

import java.math.BigDecimal;
import java.math.RoundingMode;

public class Demo12 {

public static void main(String[] args) {
//divideAndRemainder方法,返回一個數(shù)組,該數(shù)組內(nèi)部包含了兩個BigDecimal,分別是商和余數(shù),其中商總是整數(shù),余數(shù)不會大于除數(shù)。
//我們可以利用這個特性來判斷兩個BigDecimal是否是整數(shù)倍數(shù)。
BigDecimal n = new BigDecimal("123.456");
BigDecimal m = new BigDecimal("0.123");
BigDecimal[] dr = n.divideAndRemainder(m);
System.out.println(dr[0]); // 1003
System.out.println(dr[1]); // 0.087

if (dr[1].signum() == 0) {
// n是m的整數(shù)倍
System.out.println("n是m的整數(shù)倍");
}else {
System.out.println("n不是m的整數(shù)倍");
}
}
}

  3.比較兩個BigDecimal

  如果我們想比較兩個BigDecimal的值是否相等,需要特別注意,請不要使用equals()方法,因為使用該方式進行比較時,不但要求兩個BigDecimal的值相等,還要求它們的scale()結(jié)果也相等。所以一般是建議使用compareTo()方法來比較,它會根據(jù)兩個值的大小分別返回負數(shù)、正數(shù)和0,分別表示小于、大于和等于。如下所示:  

import java.math.BigDecimal;

public class Demo13 {

public static void main(String[] args) {
BigDecimal d1 = new BigDecimal("123.456");
BigDecimal d2 = new BigDecimal("123.456000");
// false,因為scale不同
System.out.println("d1==d2? "+d1.equals(d2));
// true,因為d2去除尾部0后scale變?yōu)?
System.out.println("d1==d2? "+d1.equals(d2.stripTrailingZeros()));
//結(jié)果=0,負數(shù)表示小于,正數(shù)表示大于,0表示等于
System.out.println("d1==d2? "+d1.compareTo(d2));
}

}

  之所以需要使用compareTo()方法來比較兩個BigDecimal的值才準確,這是因為一個BigDecimal實際上由一個BigInteger和一個scale組合而成的,其中BigInteger表示一個完整的整數(shù),scale表示小數(shù)位數(shù)。如下圖所示:

1683539432641.image

  compareTo()方法內(nèi)部會對小數(shù)位數(shù)進行判斷,所以更準確,如下圖:

1683539432641.image

  三. 結(jié)語

    至此,小編就把BigInteger、BigDecimal等大數(shù)字類介紹完畢了,最后給大家總結(jié)一下今天的重點內(nèi)容:

  ● BigInteger用于表示任意大小的整數(shù);

  ● BigInteger是不變類,并且繼承自Number;

  ● 將BigInteger轉(zhuǎn)換成基本類型時可使用longValueExact()等方法保證結(jié)果準確;

  ● BigDecimal用于表示精確的小數(shù),常用于財務計算;

  ● 比較BigDecimal的值是否相等,必須使用compareTo()而不能使用equals()。

聲明:本站稿件版權均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內(nèi)將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
2022一本久道久久综合狂躁| 亚洲中文字幕无码永久在线| 亚洲国产精品无码7777一线| 一起碰一起噜一起| FREE潄白的SEX性娇小HD| 刺激战场老阿姨是谁啊| 国产性猛交╳XXX乱大交| 久久久久国色AV免费观看性色| 女孩子手脚绑起来嘴用胶带封上 | 亚洲精品无码久久久影院相关影片 | 亚洲国产精久久久久久久| 中文字幕在线观看| 公翁的粗大放进我的秘密小说| 高潮潮喷奶水飞溅视频无码 | 伊在人亚洲香蕉精品区麻豆| 中文字幕亚洲一区二区VA在线| 办公室的交易HD中文字幕| 国产精品无码一区二区三区在| 久久WWW免费人成_看片| 人妻丰满熟妇AV无码区HD| 无人区码一码二码三码区别在哪里| 亚洲性色成人AV天堂| 办公室的交易HD中文字幕| 国内极度色诱视频网站| 欧美丰满少妇内射XXXX免费| 玩两个丰满老熟女久久网| 一区二区无码在线视频| 丰满人妻中伦妇伦精品APP| 精品一区二区三区东京热| 人妻丰满熟妇AV无码区动漫| 亚洲AV无码一区二区高潮 | 艳妇乳肉豪妇荡乳| 大炕上的肉体交换农村乱睡| 精品欧美一区二区在线观看| 人妻丰满熟妞AV无码区| 亚洲AV永久无码精品网址| A级毛片免费高清视频| 国产无遮挡又黄又大又爽 | 中文字幕乱偷无码av先锋蜜桃| 父债子偿BY画崖海棠| 久久久久亚洲AV成人无码电影| 日韩AV无码中文一区二区三区 | 欧美日韩国产综合草草| 亚洲AV无码一区二区二三区| 八戒福利WWW资源在线观看| 娇妻在我面前被黑人撑爆| 日本国产一区二区三区在线观看| 亚洲精品无码不卡在线播放HE| 菠萝蜜国际通道一区麻豆| 久精品夜色国产亚洲AV| 色哟哟免费精品网站入口| 永久免费AⅤ无码网站国产| 国产精品白浆无码流出| 女生裙子里面到底穿了啥| 亚洲VA无码手机在线电影| 成人免费看的A级毛片| 久久久久蜜桃精品成人片| 无码中文字幕AⅤ精品影院| JAPANRCEP老熟妇乱子伦视频| 精品成人免费一区二区| 十八18禁国产精品WWW| 97久久精品人人爽人人爽蜜臀 | 3D动漫精品啪啪一区二区中| 黑人巨大无码中文字幕无码| 日韩一区二区三区AV| 中文在线官网在线| 狠狠色伊人亚洲综合网站野外| 日本一本2017国产| 18禁纯肉高黄无码动漫| 精品人妻少妇一区二区三区不卡| 熟女体下毛毛黑森林| CAOPOREN超碰| 浪荡人妻共32部黑人大凶器电影| 小少妇ASS浓PICS| 二男一女一起日B| 欧美丰满少妇人妻精品| 亚洲一区二区三区丝袜| 国产日韩AV免费无码一区二区| 日韩AV无码中文一区二区三区| ◇一本大道香蕉中文在线| 久久99国产精品片久久99蜜桃| 五十路丰满熟女av名单大全| 成人网站在线进入爽爽爽| 女人为啥摸几下就让进了| 艳妇臀荡乳欲伦69调教视频| 好男人官网在线观看免费播放| 少妇愉情理仑片高潮| 爆乳美女午夜福利视频| 女的用嘴巴吃鸡会得HPV| 亚洲中文字幕爆乳人妻| 黑人勃起太大进不去| 无码不卡AV东京热毛片| 成人小说亚洲一区二区三区| 欧美性爱视频第一页| 1—36集电视剧免费观看36集| 久久精品亚洲精品国产色婷| 亚洲AV无码成人精品区在线欢看| 国产精品99久久免费观看| 色欲色香天天天综合无码| 爆乳护士HD完整版在线播放| 欧美日韩一区二区成人午夜电影| 中文字幕伊人久久| 久久综合九色综合欧洲98| 亚洲熟妇无码久久精品| 精品人妻一区二区三区视频 | JAPANESE极品丰满少妇| 内射口爆少妇麻豆| 52色擼99热99RE超碰| 免费A级毛片在线播放| 玉蒲团Ⅲ艳乳叶媚子| 久久影院九九被窝爽爽| 一区二区精品视频| 久久久精品午夜免费不卡| 亚洲色欲久久久久综合网| 久爱无码精品免费视频在线观看 | 精品国产V无码大片在线看| 亚洲AV永久无码精品尤物在线| 国产私人尤物无码不卡| 性高湖久久久久久久久AAAAA| 国产精品人人做人人爽 | 中文字日产幕码三区的做法大全| 麻豆国产VA免费精品高清在线| 又湿又紧又大又爽A视频| 美女与野兽在线观看| 607080岁奶奶| 亲孑伦视频一区二区三区| XXXX性BBBB欧美| 日韩AV无码AV免费AV不卡| 大黑大巴大战欧洲美女图片| 丝袜足控一区二区三区| 国产精品自产拍高潮在线观看| 小雪的L3又嫩又紧又多水图| 韩国电影办公室6免费完整版| 亚洲精品乱码久久久久久中文字幕| 精品亚洲国产成人| 在线无码一区二区| 欧美黑人性爱视频| 超碰97人人射妻| 挺进绝色老师的紧窄小肉六视频| 国产日产欧产美韩系列| 亚洲人成无码网站久久99热国产| 久久无码专区国产精品| 2021国内精品久久久久精品K | 成人毛片女18免费| 同性男男黄G片免费网站| 国产一区二区无码蜜芽精品| 亚洲区色情区激情区小说色情书| 老熟妇乱子伦牲交视频| AV无码AV不卡一区二区| 搡老女人老妇女老熟女偷拍| 国产精品美女久久久网站| 亚洲成AV人片不卡无码| 巨胸爆乳美女露双奶头挤奶| 337P日本欧洲亚洲大胆在线| 日本爆乳片手机在线播放| 国产精品Ⅴ无码大片在线看| 亚洲国产AV无码男人的天堂| 久久婷婷国产综合精品| YSL千人千色8610| 无码A级毛片免费视频内谢5J| 激情内射日本一区二区三区| 中国女人内射6XXXXX| 日本免费黄色网址| 国产人妖视频一区二区| 伊在人亚洲香蕉精品区| 日おめでとうございます| 国产拍揄自揄免费观看| 一受多攻同做H嗯啊巨肉| 人妻熟妇乱又伦精品无码专区 | 国产成人AV综合久久| 亚洲精品乱码久久久久久中文字幕| 男女嘿咻发声动态图| 公天天吃我奶躁我的B| 亚洲精品无码av中文字幕电影网站| 女人高潮特级毛片| 国产成人精品综合在线观看| 亚洲人成色777777精品音频| 欧美日韩国产码高清综合人成| 国产精品VA在线观看无码不卡| 亚洲一区二区三区无码国产| 秋霞在线看片无码免费| 国产午夜无码福利在线看网站| 中文在线天堂А√在线| 天堂√最新版中文在线| 久久精品国产男包| 成人无码AV网站在线观看| 亚洲成AV人片久久| 欧美色成人综合天天影院| 国产情侣露脸高清在线| 中文无码乱人伦中文视频在线| 深入浅出糙汉X软妹V1V| 久久久久亚洲AV成人片丁香| 大黑大巴大战欧洲美女图片| 亚洲欧美日韩精品久久| 日本伊人色综合网| 久久精品人人槡人妻人人玩| 大香伊人久久精品一区二区| 亚洲中文自拍另类AV片| 熟妇人妻VA精品中文字幕| 噜噜噜亚洲色成人网站∨|