[java初探10]__關于數(shù)字處理類

  • 前言
    在我們的日常開發(fā)過程中,我們會經(jīng)常性的使用到數(shù)字類型的數(shù)據(jù),同時,也會有眾多的對數(shù)字處理的需求,針對這個方面的問題,在JAVA語言中.提供解決方法的類就是數(shù)字處理類

  • java中的數(shù)字處理類包括:
    • DecimalFormat類,用于格式化數(shù)字
    • Math類,為各種數(shù)學計算提供了工具方法
    • Random類,為java處理隨機數(shù)問題提供了各種方法
    • BigInteger類與BigDecimal類,為java處理大數(shù)字提供了相應的數(shù)學運算操作方法.

  • DecimalFormat類

數(shù)字的格式化在解決實際問題時,使用非常普遍,如超市的商品價格,銀行的余額顯示,都需要對小數(shù)的精度有特定的要求,java主要對浮點數(shù)進行格式化.JAVA語言就是通過DecimalFormat類來對其進行格式化操作的.

DecimalFromat類是繼承與NumberFormat類的,NumberFormat類又是Format類的子類,這里我們就可以很明顯的觀察到java類的繼承機制是如何在Java類庫中存在的.

public class DecimalFormat extends NumberFormat {

2019-4-10-02.png

DecimalFormat類用以格式化十進制數(shù)字.他可以將一些數(shù)字格式化為整數(shù),浮點數(shù),百分數(shù)等.通過該類可以為要輸出的數(shù)字加上單位或控制數(shù)字的精度.一般通過實例化DecimalFormat對象是傳遞數(shù)字格式,也可以通過類中的applyPattern方法來實現(xiàn)數(shù)字的格式化.

需要注意的是:
在格式化數(shù)字的時候,DecimalFormat類中使用了一些特殊字符構成一個格式化的模版,使數(shù)字按照一定的特殊字符來進行匹配.

2019-4-10-03.png
  • 格式化方法體的代碼
 // 第一種格式化方法,直接通過構造方法傳入格式控制參數(shù)patten.
    private void NumFormating(String patten, double adouble){  // 傳入兩個參數(shù),第一個控制格式,第二個為傳入的數(shù)值.
    DecimalFormat format = new DecimalFormat(patten);
    System.out.println(format.format(adouble)); // 通過format方法格式化參數(shù)adouble
    }
    // 第二種格式化方法,通過類的方法applyPattern方法傳入格式控制參數(shù)patten
    private void NumFormating1(String patten,double adouble){
    DecimalFormat format = new DecimalFormat();
    format.applyPattern(patten);
    System.out.println(format.format(adouble)); // 通過format方法,格式化參數(shù)adouble
    }
  • 測試一下:
    在主方法中通過實例化對象調(diào)用我們編寫的格式化方法來對不同的特殊字符組進行示例輸出:
 public static void main(String[] args) {
        Sty_DigitalProcessing digitalProcessing = new Sty_DigitalProcessing();
        digitalProcessing.NumFormating("000,000.0000",12345.67);
        digitalProcessing.NumFormating1("###,###.####",12345.67);
        digitalProcessing.NumFormating("###,###.####kg",12345.67);
        System.out.println();
        digitalProcessing.NumFormating("#.###%",0.345);
        digitalProcessing.NumFormating("0.000%",0.345);
        System.out.println();
        digitalProcessing.NumFormating("0.0000\u2030",0.123456);
        digitalProcessing.NumFormating("#.####\u2030",0.123456);
        System.out.println();
        digitalProcessing.NumFormating("000,000,000.0000\u00A4",1234567.89);
        digitalProcessing.NumFormating("###,###,###.##'#'",1234567.89);
    }
  • 結果


    2019-4-10-04.png

我們可以很明顯的看出來,0和#之間的區(qū)別,前者,在位數(shù)不足時會補零,后者則不會補零.通常情況下,我們知道,一般是不會在數(shù)字前補零的,補零的情況通常出現(xiàn)在小數(shù)后面.


  • Math類
    Math類主要給我們提供了一些數(shù)學上的眾多運算方法,我們知道,一個科學計算器是具有著非常強大功能的,而我們最基本的運算符只有"+,-,*,/".所以很多運算方法,在java語言中,都是是通過Math類實現(xiàn)的和提供的.
    同時,Math類也提供有眾多的常量定義,因為Math中的方法是通用的,可以適用于程序的任何時候任何地方的數(shù)學運算中,所以Math類中的方法都被構建為靜態(tài)的方法,使得他們都可以直接被調(diào)用.
2019-4-10-05.png
2019-4-10-06.png
  • Math中常用的方法
    Math中常用的數(shù)學運算方法有很多,其大致可以分為4類.三角函數(shù)方法,指數(shù)函數(shù)方法,取整方法以及取最大最小值和絕對值函數(shù)方法.

  • 三角函數(shù)方法

    2019-4-10-07.png

它們都是靜態(tài)的,所以可以直接通過類名.方法名調(diào)用.

 System.out.println(Math.sin(subtense)); // 返回正弦
        System.out.println(Math.cos(subtense)); // 返回余弦
        System.out.println(Math.tan(subtense)); // 返回正切
        System.out.println(Math.asin(subtense)); // 返回一個值的反正弦
        System.out.println(Math.acos(subtense)); // 返回一個值的反余弦
        System.out.println(Math.atan(subtense)); // 返回一個值的反正切
        System.out.println(Math.toRadians(angdeg)); // 將角度轉換為弧度
        System.out.println(Math.toDegrees(angdeg)); // 將弧度轉換為角度
  • 指數(shù)函數(shù)方法
    2019-4-10-08.png

    2019-4-10-09.png
 // 指數(shù)函數(shù)方法
    private void styindex(double adouble,double adouble1){
        System.out.println(Math.exp(adouble)); // 用于獲取e的a次方
        System.out.println(Math.log(adouble)); // 用于取自然對數(shù),lna的值
        System.out.println(Math.log10(adouble)); // 用于取底數(shù)為10的整數(shù)
        System.out.println(Math.sqrt(adouble)); // 用于取a的平方根,其中a的值不能為負值.
        System.out.println(Math.cbrt(adouble)); // 用于取a的立方根
        System.out.println(Math.pow(adouble,adouble1)); // 用于取a的b次方
    }
  • 取整函數(shù)方法
2019-4-10-11.png
 private void styAdjustment(double adouble,float afloat){
        System.out.println(Math.ceil(adouble)); // 返回大于等于參數(shù)的最小整數(shù).
        System.out.println(Math.floor(adouble)); // 返回小于等于參數(shù)的最大整數(shù).
        System.out.println(Math.rint(adouble)); // 返回與參數(shù)最接近的整數(shù)(若為0.5取偶數(shù),即加一)
        System.out.println(Math.round(adouble)); // 將參數(shù)家上0.5返回與參數(shù)最近的整數(shù)
        System.out.println(Math.round(afloat)); // 將參數(shù)加上0.5后返回與參數(shù)最近的整數(shù),然后強轉為長整型.
    }

  • 取絕對值,最大最小值的函數(shù)方法
2019-4-10-12.png
 /**
     *  取最大值,最小值,絕對值函數(shù)方法.
     *  其方法都重載有多個類型的,滿足不同類型參數(shù)的最大最小值,絕對值的獲取.
     */
    private void stytakequals(double adouble,double adouble1){
        System.out.println(Math.max(adouble,adouble1)); // 取兩個double型參數(shù)的最大值
        System.out.println(Math.min(adouble,adouble1));
        System.out.println(Math.abs(adouble)); // 返回double型參數(shù)的絕對值
    }

  • 隨機數(shù)
    隨機數(shù)的獲取有兩種方式,Math.random方法給我們提供了double型隨機數(shù)的獲取.Random類則要更加廣泛一些,可以生成任何類型的隨機數(shù).這里直接通過代碼表示了:
 /**
     * 隨機數(shù)
     * Math類中有提供random方法來生產(chǎn)隨機數(shù).
     * 該方法默認生成0.0-1.0之間的double型隨機數(shù).
     * 但該方法通過處理后還是可以生成任何范圍的隨機數(shù)的.
     * ;將該方法*n后強轉為int型輸出,可以得到0-n范圍的隨機數(shù).
     * 而m+(int)Math.random()*n,將上面的式子+m后,就可以得到m-(m+n)范圍的隨機數(shù).
     */
    private void styrandom(){
        System.out.println(Math.random());
        System.out.println((int)(Math.random()*100));
        System.out.println((int)(10+Math.random()*15));
        System.out.println((char)('a'+ Math.random()*('z'-'a'+1))); // 這里其實可以封裝成一個獲取固定范圍的隨機字符的方法.
    }
    /**
     * Random類
     * Random類提供各種類型隨機數(shù)的構造方法
     * 通過實例化對象調(diào)用.
     * 比Math.random更為強大.
     */
    private void styRandom(int n){ // 傳入?yún)?shù)n 控制范圍
        Random random = new Random(10000);
        System.out.println(random.nextInt());
        System.out.println(random.nextDouble());
    }

關于random seedvalue的說明參看:

一篇關于什么是隨機種子的博文


  • 大數(shù)字運算
    • BigInteger類
      BigInteger類型的數(shù)范圍比Integer類的要打的多,我們知道int型最大為2^31-1;而BigInteger類支持任意大小精度的整數(shù).并且提供一些基本的運算方法,加減乘除等,這里就不多加說明了,在BigInteger類的結構視窗中可以找到他們.

BigInteger類通過構造方法來直接將某個值轉換為BigInteger類型.其構造方法有很多.

2019-4-10-10.png
 private void styBigInteger(){
        BigInteger bigInteger = new BigInteger("12345678901234567890"); // 直接通過構造法方法,將值轉為BigInteger型.
        BigInteger bigInteger1 = new BigInteger("43534645376574567314253543");
        System.out.println(bigInteger.add(bigInteger1)); // 簡單的運算
    }

  • BigDecimal類
    相對的,BigInteger類只是針對與大整數(shù)之間的運算而BigDecimal類較其更加完善的一點就是,引入了小數(shù)概念,所以BigDecimal類支持任何精度的定點數(shù).
    同樣的BigDecimal類也提供有一些基本的運算方法.可以在類中查看.
    BigDecimal類也是通過構造方法直接轉換值的類型:
    BigDecimal(double val)方法和BigDecimal(String val)方法.
BigDecimal bigDecimal = new BigDecimal(1231234345634.546756734563);
BigDecimal bigDecimal1 = new BigDecimal("124235345645765.783452352342534");

關于java數(shù)字處理類就了解到這么多了,其實其中還有很多方法都沒有涉及到,關于java的類庫,其中值得學習的,涵蓋著各個方面的類和方法,需要在之后的不斷學習的過程中不斷接觸了解才能夠漸漸掌握,這里也僅僅只是對其中極少的一部分基本知識做總結學習.


  • 后記
    關于java語言的基本知識大致就學到這里了,之后會新開一個筆記系列,接著學習java的核心知識,接口,繼承封裝,多態(tài),類的高級特性,異常處理,Swing窗口程序設計.等等.
    可以說這才是剛剛跨入java語言的門檻吧?任務還十分艱巨,革命還需百倍努力啊!
    之后我會在出一篇關于java初探階段的整理筆記,將這段時間的學習做一個總結歸納,并整理一下筆記的順序,捋一捋思路.

最后也祝愿大家都能夠在自己前進的道路上披荊斬棘,共同進步,走向成功.


更新時間:
2019-4-10
22:06

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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