91aaa在线国内观看,亚洲AV午夜福利精品一区二区,久久偷拍人视频,久久播这里有免费视播

<strong id="fvuar"></strong>

  • <sub id="fvuar"><dl id="fvuar"><em id="fvuar"></em></dl></sub>

    1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

      手機(jī)站
      千鋒教育

      千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

      千鋒教育

      掃一掃進(jìn)入千鋒手機(jī)站

      領(lǐng)取全套視頻
      千鋒教育

      關(guān)注千鋒學(xué)習(xí)站小程序
      隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

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

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

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

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

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

        一. BigInteger類

        1.簡(jiǎn)介

        小編在之前給大家講解8種基本類型時(shí)就說(shuō)過(guò),不同的數(shù)據(jù)類型,有不同的取值范圍,我們?cè)偻ㄟ^(guò)下表回顧一下:

      1683539185494.image

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

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

        2. 使用方法

        2.1 常用API方法

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

      1683539219274.image

        2.2 基本案例

        我們先來(lái)通過(guò)一個(gè)案例,來(lái)驗(yàn)證一下BigInteger中的數(shù)字到底有多大。  

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

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

        2.3 類型轉(zhuǎn)換

        小編在上面說(shuō)過(guò),BigInteger其實(shí)是Number的子類,我們知道,Number中定義了幾個(gè)負(fù)責(zé)類型轉(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()

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

      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的值超過(guò)了float的最大范圍(3.4x1038),結(jié)果并不會(huì)出現(xiàn)ArithmeticException異常,而是會(huì)出現(xiàn)Infinity,如下所示: 

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

        2.4 其他用法

        接下來(lái)我們?cè)賮?lái)看看其他的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("請(qǐng)輸入一個(gè)整數(shù):");
      // 保存用戶輸入的數(shù)字
      int num = scanner.nextInt();

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

      }

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

        二. BigDecimal類

        1.簡(jiǎn)介

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

        2.使用方法

        2.1 常用構(gòu)造方法

        以下是BigDecimal類的常用構(gòu)造方法:

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

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

        2.2 常用API方法

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

      import java.math.BigDecimal;

      public class Demo11 {

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

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

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

      }

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

        2.3 divide()除法

        BigDecimal進(jìn)行加、減、乘時(shí),數(shù)字的精度不會(huì)丟失,但是進(jìn)行除法運(yùn)算時(shí),有可能會(huì)出現(xiàn)無(wú)法除盡的情況,此時(shí)必須指定精度以及如何進(jìn)行截?cái)唷igDecimal給我們提供了divide()和divideAndRemainder()兩個(gè)方法可以進(jìn)行除法運(yùn)算。

        其中,divide()方法有3個(gè)參數(shù)分別表示除數(shù)、商的小數(shù)點(diǎn)后的位數(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");

      // 會(huì)產(chǎn)生ArithmeticException異常,因?yàn)槌槐M,可以設(shè)置RoundingMode,按照指定的方法進(jìn)行四舍五入或者直接截?cái)啵?br /> //BigDecimal d3 = d1.divide(d2);

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

         2.4 divideAndRemainder()除法

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

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

      public class Demo12 {

      public static void main(String[] args) {
      //divideAndRemainder方法,返回一個(gè)數(shù)組,該數(shù)組內(nèi)部包含了兩個(gè)BigDecimal,分別是商和余數(shù),其中商總是整數(shù),余數(shù)不會(huì)大于除數(shù)。
      //我們可以利用這個(gè)特性來(lái)判斷兩個(gè)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.比較兩個(gè)BigDecimal

        如果我們想比較兩個(gè)BigDecimal的值是否相等,需要特別注意,請(qǐng)不要使用equals()方法,因?yàn)槭褂迷摲绞竭M(jìn)行比較時(shí),不但要求兩個(gè)BigDecimal的值相等,還要求它們的scale()結(jié)果也相等。所以一般是建議使用compareTo()方法來(lái)比較,它會(huì)根據(jù)兩個(gè)值的大小分別返回負(fù)數(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,因?yàn)閟cale不同
      System.out.println("d1==d2? "+d1.equals(d2));
      // true,因?yàn)閐2去除尾部0后scale變?yōu)?
      System.out.println("d1==d2? "+d1.equals(d2.stripTrailingZeros()));
      //結(jié)果=0,負(fù)數(shù)表示小于,正數(shù)表示大于,0表示等于
      System.out.println("d1==d2? "+d1.compareTo(d2));
      }

      }

        之所以需要使用compareTo()方法來(lái)比較兩個(gè)BigDecimal的值才準(zhǔn)確,這是因?yàn)橐粋€(gè)BigDecimal實(shí)際上由一個(gè)BigInteger和一個(gè)scale組合而成的,其中BigInteger表示一個(gè)完整的整數(shù),scale表示小數(shù)位數(shù)。如下圖所示:

      1683539432641.image

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

      1683539432641.image

        三. 結(jié)語(yǔ)

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

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

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

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

        ● BigDecimal用于表示精確的小數(shù),常用于財(cái)務(wù)計(jì)算;

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

      聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
      10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
      請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
      免費(fèi)領(lǐng)取
      今日已有369人領(lǐng)取成功
      劉同學(xué) 138****2860 剛剛成功領(lǐng)取
      王同學(xué) 131****2015 剛剛成功領(lǐng)取
      張同學(xué) 133****4652 剛剛成功領(lǐng)取
      李同學(xué) 135****8607 剛剛成功領(lǐng)取
      楊同學(xué) 132****5667 剛剛成功領(lǐng)取
      岳同學(xué) 134****6652 剛剛成功領(lǐng)取
      梁同學(xué) 157****2950 剛剛成功領(lǐng)取
      劉同學(xué) 189****1015 剛剛成功領(lǐng)取
      張同學(xué) 155****4678 剛剛成功領(lǐng)取
      鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
      董同學(xué) 138****2867 剛剛成功領(lǐng)取
      周同學(xué) 136****3602 剛剛成功領(lǐng)取
      相關(guān)推薦HOT
      PUE是什么?

      一、PUE是什么PUE,即功耗比(Power Usage Effectiveness),是數(shù)據(jù)中心的能源效率指標(biāo)。它是數(shù)據(jù)中心總功耗與設(shè)備功耗的比值,用于評(píng)估數(shù)據(jù)中...詳情>>

      2023-10-15 07:13:07
      graph cut和graph cuts有什么區(qū)別?

      1.語(yǔ)境不同graph cut”通常在描述一個(gè)操作時(shí)使用,比如”perform a graph cut”,它指的是在圖中找到一個(gè)切割,將圖劃分為兩個(gè)...詳情>>

      2023-10-15 07:02:16
      什么是雙機(jī)熱備?

      一、雙機(jī)熱備的原理雙機(jī)熱備是指在系統(tǒng)中配置兩臺(tái)服務(wù)器(主服務(wù)器和備份服務(wù)器),兩者通過(guò)高速網(wǎng)絡(luò)連接進(jìn)行實(shí)時(shí)數(shù)據(jù)同步和狀態(tài)同步。主服務(wù)器...詳情>>

      2023-10-15 06:37:02
      偏最小二乘支持向量機(jī)和支持向量機(jī)回歸的區(qū)別是什么?

      1.模型構(gòu)建的理論基礎(chǔ)不同支持向量機(jī)回歸(SVR)基于統(tǒng)計(jì)學(xué)習(xí)理論,其主要思想是找到一個(gè)超平面,使得大部分?jǐn)?shù)據(jù)點(diǎn)都在這個(gè)超平面的一定范圍內(nèi),...詳情>>

      2023-10-15 06:30:45
      VAE、GAN和transformer有什么區(qū)別?

      1.模型結(jié)構(gòu)不同VAE(變分自編碼器)是一種生成模型,其基于概率圖模型和自編碼器,能夠?qū)W習(xí)數(shù)據(jù)的潛在分布。GAN(生成對(duì)抗網(wǎng)絡(luò))同樣是一種生成...詳情>>

      2023-10-15 06:10:12