Java中BigInteger類(lèi)、BigDecimal類(lèi)、Date類(lèi)、DateFormat類(lèi)、Calendar類(lèi)

BigInteger類(lèi)

  • BigInteger類(lèi)概述
    • 可以讓超過(guò)Integer范圍內(nèi)的數(shù)據(jù)進(jìn)行運(yùn)算
  • 構(gòu)造方法
    • public BigInteger(String val)

這個(gè)類(lèi)就很好理解了,首先我們要了解Integer的范圍是多少?

public class BigIntegerDemo { 
     public static void main(String[] args) {
        //我們先來(lái)輸出Integer的最大最小值              
       System.out.println(Integer.MAX_VALUE);//2147483647 
       System.out.println(Integer.MIN_VALUE);//-2147483648 
       //可以看到Integer的范圍,如果我們超過(guò)Integer的范圍,就要用BigInteger了 
      //假如我們用Integer來(lái)創(chuàng)建一個(gè)超出它的范圍的一個(gè)對(duì)象,那么肯定是報(bào)錯(cuò)的 
      // Integer iii = new Integer("2147483648");
      // NumberFormatException
      //    System.out.println(iii); 
      // 所以通過(guò)大整數(shù)來(lái)創(chuàng)建對(duì)象 
      BigInteger bi = new BigInteger("2147483648");    
      System.out.println("BigInteger :" + bi);//BigInteger :2147483648 
   }
}
  • BigInteger類(lèi)成員方法
    • public BigInteger add(BigInteger val):加
    • public BigInteger subtract(BigInteger val):減
    • public BigInteger multiply(BigInteger val):乘
    • public BigInteger divide(BigInteger val):除
    • public BigInteger[] divideAndRemainder(BigInteger val):返回商和余數(shù)的數(shù)組
public class BigIntegerDemo { 
     public static void main(String[] args) { 
       //首先創(chuàng)建兩個(gè)對(duì)象,然后我們來(lái)驗(yàn)證加減乘除的成員方法 
       BigInteger bi1 = new BigInteger("100");
       BigInteger bi2 = new BigInteger("50"); 
      //加 
      System.out.println("add:" + bi1.add(bi2));//add:150 
     //減 
    System.out.println("subtract:" + bi1.subtract(bi2));//subtract:50 
    //乘 
     System.out.println("multiply:" + bi1.multiply(bi2));//multiply:5000 
     //除
     System.out.println("divide:" + bi1.divide(bi2));
      //divide:2 
      BigInteger[] bis = bi1.divideAndRemainder(bi2); 
      System.out.println("商:" + bis[0]);   //商:2
      System.out.println("余數(shù):" + bis[1]);  //余數(shù):0 
   }
}

BigDecimal類(lèi)

看到了這個(gè)類(lèi),肯定有人都不知道它是用來(lái)干什么的,我來(lái)給大家解釋一下
由于在運(yùn)算的時(shí)候,float類(lèi)型和double很容易丟失精度。所以,為了能精確的表示、計(jì)算浮點(diǎn)數(shù),Java提供了BigDecimal類(lèi)

  • BigDecimal類(lèi)概述
    • 不可變的、任意精度的有符號(hào)十進(jìn)制數(shù)。
  • 構(gòu)造方法
    • public BigDecimal(String val)
public class BigDecimalDemo {
    //下面這些輸出結(jié)果你能看出他們的結(jié)果嗎?在看看下面的輸出結(jié)果是不是和你想的一樣呢? 
   public static void main(String[] args) { 
         System.out.println(0.09 + 0.01); 
         System.out.println(1.0 - 0.32); 
         System.out.println(1.015 * 100); 
        System.out.println(1.301 / 100); 
        System.out.println(1.0 - 0.12); 
  }
}
  • BigDecimal類(lèi)成員方法
    • public BigDecimal add(BigDecimal augend):加
    • public BigDecimal subtract(BigDecimal subtrahend):減
    • public BigDecimal multiply(BigDecimal multiplicand):乘
    • public BigDecimal divide(BigDecimal divisor):除
    • public BigDecimal divide(BigDecimal divisor,int scale, int roundingMode)?:商,保留幾位小數(shù)
public class BigDecimalDemo { 
        public static void main(String[] args) { 
BigDecimal bd1 = new BigDecimal("0.09"); 
BigDecimal bd2 = new BigDecimal("0.01"); 
System.out.println("add:" + bd1.add(bd2)); 
BigDecimal bd3 = new BigDecimal("1.0"); 
BigDecimal bd4 = new BigDecimal("0.32"); 
System.out.println("subtract:" + bd3.subtract(bd4)); 
BigDecimal bd5 = new BigDecimal("1.015"); 
BigDecimal bd6 = new BigDecimal("100"); 
System.out.println("multiply:" + bd5.multiply(bd6)); 
BigDecimal bd7 = new BigDecimal("1.301");
BigDecimal bd8 = new BigDecimal("100"); 
System.out.println("divide:" + bd7.divide(bd8)); System.out.println("divide:"+ bd7.divide(bd8, 3, BigDecimal.ROUND_HALF_UP)); 
System.out.println("divide:"+ bd7.divide(bd8, 8, BigDecimal.ROUND_HALF_UP)); 
     }
}

如果你仔細(xì)看結(jié)果你會(huì)發(fā)現(xiàn),除法最后保留幾位小數(shù),還有為什么要用BigDecimal.ROUND_HALF_UP,我來(lái)再給大家講講除法的詳細(xì)說(shuō)明

下面我們來(lái)看看除法的詳細(xì)說(shuō)明:
- divide(BigDecimal divisor, int scale, introundingMode)

  • BigDecimal的setScale方法 :BigDecimal.setScale() 方法用于格式化小數(shù)點(diǎn) ,表示保留一位小數(shù),默認(rèn)用四舍五入方式
    • 直接刪除多余的小數(shù)位,如2.35會(huì)變成2.3
  • setScale(1,BigDecimal.ROUND_DOWN)
    - 進(jìn)位處理,2.35變成2.4 setScale(1,BigDecimal.ROUND_UP)
    - 四舍五入,2.35變成2.4 setScale(1,BigDecimal.ROUND_HALF_UP)
    - 四舍五入,2.35變成2.3,如果是5則向下舍setScaler(1,BigDecimal.ROUND_HALF_DOWN)
  • BigDecimal枚舉常量用法摘要 :
    - CEILING 向正無(wú)限大方向舍入的舍入模式。
    - DOWN 向零方向舍入的舍入模式。
    - FLOOR 向負(fù)無(wú)限大方向舍入的舍入模式。
    - HALF_DOWN 向最接近數(shù)字方向舍入的舍入模式,如果與兩個(gè)相鄰數(shù)字的距離相等,則向下舍入。
    - HALF_EVEN 向最接近數(shù)字方向舍入的舍入模式,如果與兩個(gè)相鄰數(shù)字的距離相等,則向相鄰的偶數(shù)舍入。
    - HALF_UP 向最接近數(shù)字方向舍入的舍入模式,如果與兩個(gè)相鄰數(shù)字的距離相等,則向上舍入。
    - UNNECESSARY 用于斷言請(qǐng)求的操作具有精確結(jié)果的舍入模式,因此不需要舍入。
    - UP 遠(yuǎn)離零方向舍入的舍入模式。

Date類(lèi)

  • Date類(lèi)概述
    • 類(lèi) Date 表示特定的瞬間,精確到毫秒。
  • 構(gòu)造方法
    • public Date():根據(jù)當(dāng)前的默認(rèn)毫秒值創(chuàng)建日期對(duì)象
    • public Date(long date):根據(jù)給定的毫秒值創(chuàng)建日期對(duì)象
public class DateDemo { 
      public static void main(String[] args) { 
// 創(chuàng)建對(duì)象 
Date d = new Date();
System.out.println("d:" + d) 
//long time = System.currentTimeMillis();
//獲取當(dāng)前的時(shí)間 
// 創(chuàng)建對(duì)象
 long time = 1000 * 60 * 60; 
// 1小時(shí) 
Date d2 = new Date(time); 
System.out.println("d2:" + d2); 
     }
}
  • 成員方法
    • public long getTime():獲取時(shí)間,以毫秒為單位(從Date得到一個(gè)毫秒值)
    • public void setTime(long time):設(shè)置時(shí)間(把一個(gè)毫秒值轉(zhuǎn)換為Date)
public class DateDemo { 
    public static void main(String[] args) { 
    // 創(chuàng)建對(duì)象 
Date d = new Date(); 
   // 獲取時(shí)間 
long time = d.getTime(); 
System.out.println(time); 
System.out.println(System.currentTimeMillis());
//運(yùn)行結(jié)果可以發(fā)現(xiàn),上面的結(jié)果是相同的 
// 設(shè)置時(shí)間 
d.setTime(1000); 
System.out.println("d:" + d); 
}
}

我們發(fā)現(xiàn)得到的日期不是我們平時(shí)看到的,是國(guó)外的英文和數(shù)字組合,這樣讓我們讀起來(lái)就很不爽了,那么,我們有辦法讓它變成中國(guó)式的年月日時(shí)分秒類(lèi)型的嗎?答案是肯定可以的。java為我們提供了DateFormat類(lèi),下面我們來(lái)進(jìn)行學(xué)習(xí)

DateFormat類(lèi)

  • DateFormat類(lèi)概述
    • DateFormat 是日期/時(shí)間格式化子類(lèi)的抽象類(lèi),它以與語(yǔ)言無(wú)關(guān)的方式格式化并解析日期或時(shí)間。
    • 是抽象類(lèi),所以使用其子類(lèi)SimpleDateFormat
  • SimpleDateFormat構(gòu)造方法
    • public SimpleDateFormat():默認(rèn)模式
    • public SimpleDateFormat(String pattern):給定的模式
    給定模式字符串該如何寫(xiě)呢?我們可以去看API找到對(duì)應(yīng)的模式

        年 y
        月 M
        日 d
        時(shí) H
        分 m
        秒 s
        所以一般我們要這樣書(shū)寫(xiě)”yyyy年MM月dd日 HH:mm:ss”
        就會(huì)得到相應(yīng)的日期:比如 2016年08月17日 23:05:16
  • 成員方法
    • public final String format(Date date):Date – String(格式化)
    • public Date parse(String source):String – Date(解析)
public class DateFormatDemo { 
     public static void main(String[] args) throws ParseException { 
  // Date -- String 
// 創(chuàng)建日期對(duì)象 
Date d = new Date(); 
// 創(chuàng)建格式化對(duì)象
// SimpleDateFormat sdf = new SimpleDateFormat(); 
// 給定模式
 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); 

// Date -- String(格式化) 
String s = sdf.format(d); 
System.out.println(s); 

//String -- Date(解析) 
String str = "2016-08-08 12:12:12"; 
//在把一個(gè)字符串解析為日期的時(shí)候,請(qǐng)注意格式必須和給定的字符串格式匹配 
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
Date dd = sdf2.parse(str); 
System.out.println(dd); 
}
}

計(jì)算你來(lái)到世界的天數(shù)

public class MyYearOldDemo {
    public static void main(String[] args) throws ParseException { 
// 鍵盤(pán)錄入你的出生的年月日,注意和下面的格式相同yyyy-MM-dd Scanner sc = new Scanner(System.in); 
System.out.println("請(qǐng)輸入你的出生年月日:"); 
String line = sc.nextLine(); 
// 把該字符串轉(zhuǎn)換為一個(gè)日期 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
Date d = sdf.parse(line); 
// 通過(guò)該日期得到一個(gè)毫秒值
 long myTime = d.getTime(); 
// 獲取當(dāng)前時(shí)間的毫秒值 
long nowTime = System.currentTimeMillis(); 
// 用nowTime - myTime 得到一個(gè)毫秒值
 long time = nowTime - myTime; 
// 把time 的毫秒值轉(zhuǎn)換為年 
long day = time / 1000 / 60 / 60 / 24; System.out.println("你來(lái)到這個(gè)世界:" + day + "天"); 
}
}

Calendar類(lèi)

  • Calendar類(lèi)概述
    • Calendar 類(lèi)是一個(gè)抽象類(lèi),它為特定瞬間與一組諸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日歷字段之間的轉(zhuǎn)換提供了一些方法,并為操作日歷字段(例如獲得下星期的日期)提供了一些方法。
  • 成員方法
    • public static Calendar getInstance()
    • public int get(int field):返回給定日歷字段的值。日歷類(lèi)中的每個(gè)日歷字段都是靜態(tài)的成員變量,并且是int類(lèi)型。
    • public void add(int field,int amount):根據(jù)給定的日歷字段和對(duì)應(yīng)的時(shí)間,來(lái)對(duì)當(dāng)前的日歷進(jìn)行操作。
    • public final void set(int year,int month,int date):設(shè)置當(dāng)前日歷的年月日
public class CalendarDemo { 
   public static void main(String[] args) { 
// 其日歷字段已由當(dāng)前日期和時(shí)間初始化: 
Calendar rightNow = Calendar.getInstance(); 
// 子類(lèi)對(duì)象 
// 獲取年 
int year = rightNow.get(Calendar.YEAR); 
// 獲取月 
int month = rightNow.get(Calendar.MONTH); 
// 獲取日 
int date = rightNow.get(Calendar.DATE); 
System.out.println(year + "年" + (month + 1) + "月" + date + "日"); 
// 5年后的10天前 
c.add(Calendar.YEAR, 5); 
c.add(Calendar.DATE, -10); 
// 獲取年 
year = c.get(Calendar.YEAR); 
// 獲取月 
month = c.get(Calendar.MONTH); 
// 獲取日 date = c.get(Calendar.DATE);
 System.out.println(year + "年" + (month + 1) + "月" + date + "日"); 
c.set(2011, 11, 11); 
// 獲取年 
year = c.get(Calendar.YEAR); 
// 獲取月 
month = c.get(Calendar.MONTH); 
// 獲取日 
date = c.get(Calendar.DATE); 
System.out.println(year + "年" + (month + 1) + "月" + date + "日"); 
}
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,618評(píng)論 18 399
  • [TOC] 正則表達(dá)式 概述及基本使用 正則表達(dá)式:是指用來(lái)描述或者匹配一系列符合某個(gè)句法規(guī)則的字符串的單個(gè)字符串...
    lutianfei閱讀 419評(píng)論 0 2
  • import java.text.SimpleDateFormat;import java.util.Calend...
    霙愔閱讀 798評(píng)論 0 2
  • 主要積累一些開(kāi)發(fā)中比較 常用的工具類(lèi),部分借鑒于網(wǎng)絡(luò),主要來(lái)源于平時(shí)開(kāi)發(fā)因需求而生的小工具類(lèi) 13、ArithUt...
    大鴨梨leepear閱讀 725評(píng)論 0 1
  • 未來(lái)不會(huì)來(lái)到,你所擁有的只是今天,是此刻,此刻積極,你便永遠(yuǎn)昂揚(yáng),此刻消沉,你便一頹到底。 該面對(duì)的始終要面對(duì),若...
    不隔閱讀 303評(píng)論 1 1

友情鏈接更多精彩內(nèi)容