[java初探10]__關於數字處理類
-
前言
在我們的日常開發過程中,我們會經常性的使用到數字型別的資料,同時,也會有眾多的對數字處理的需求,針對這個方面的問題,在JAVA語言中.提供解決方法的類就是數字處理類
- java中的數字處理類包括:
- DecimalFormat類,用於格式化數字
- Math類,為各種數學計算提供了工具方法
- Random類,為java處理隨機數問題提供了各種方法
- BigInteger類與BigDecimal類,為java處理大數字提供了相應的數學運算操作方法.
-
DecimalFormat類
數字的格式化在解決實際問題時,使用非常普遍,如超市的商品價格,銀行的餘額顯示,都需要對小數的精度有特定的要求,java主要對浮點數進行格式化.JAVA語言就是通過DecimalFormat類來對其進行格式化操作的.
DecimalFromat類是繼承與NumberFormat類的,NumberFormat類又是Format類的子類,這裡我們就可以很明顯的觀察到java類的繼承機制是如何在Java類庫中存在的.
public class DecimalFormat extends NumberFormat {
DecimalFormat類用以格式化十進位制數字.他可以將一些數字格式化為整數,浮點數,百分數等.通過該類可以為要輸出的數字加上單位或控制數字的精度.一般通過例項化DecimalFormat物件是傳遞數字格式,也可以通過類中的applyPattern方法來實現數字的格式化.
需要注意的是:
在格式化數字的時候,DecimalFormat類中使用了一些特殊字元構成一個格式化的模版,使數字按照一定的特殊字元來進行匹配.
- 格式化方法體的程式碼
// 第一種格式化方法,直接通過構造方法傳入格式控制引數patten. private void NumFormating(String patten, double adouble){// 傳入兩個引數,第一個控制格式,第二個為傳入的數值. DecimalFormat format = new DecimalFormat(patten); System.out.println(format.format(adouble)); // 通過format方法格式化引數adouble } // 第二種格式化方法,通過類的方法applyPattern方法傳入格式控制引數patten private void NumFormating1(String patten,double adouble){ DecimalFormat format = new DecimalFormat(); format.applyPattern(patten); System.out.println(format.format(adouble)); // 通過format方法,格式化引數adouble }
-
測試一下:
在主方法中通過例項化物件呼叫我們編寫的格式化方法來對不同的特殊字元組進行示例輸出:
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); }
-
結果
我們可以很明顯的看出來,0和#之間的區別,前者,在位數不足時會補零,後者則不會補零.通常情況下,我們知道,一般是不會在數字前補零的,補零的情況通常出現在小數後面.
-
Math類
Math類主要給我們提供了一些數學上的眾多運算方法,我們知道,一個科學計算器是具有著非常強大功能的,而我們最基本的運算子只有"+,-,*,/".所以很多運算方法,在java語言中,都是是通過Math類實現的和提供的.
同時,Math類也提供有眾多的常量定義,因為Math中的方法是通用的,可以適用於程式的任何時候任何地方的數學運算中,所以Math類中的方法都被構建為靜態的方法,使得他們都可以直接被呼叫.
-
Math中常用的方法
Math中常用的數學運算方法有很多,其大致可以分為4類.三角函式方法,指數函式方法,取整方法以及取最大最小值和絕對值函式方法.
-
三角函式方法
它們都是靜態的,所以可以直接通過類名.方法名呼叫.
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)); // 將弧度轉換為角度
-
指數函式方法
// 指數函式方法 private void styindex(double adouble,double adouble1){ System.out.println(Math.exp(adouble)); // 用於獲取e的a次方 System.out.println(Math.log(adouble)); // 用於取自然對數,lna的值 System.out.println(Math.log10(adouble)); // 用於取底數為10的整數 System.out.println(Math.sqrt(adouble)); // 用於取a的平方根,其中a的值不能為負值. System.out.println(Math.cbrt(adouble)); // 用於取a的立方根 System.out.println(Math.pow(adouble,adouble1)); // 用於取a的b次方 }
- 取整函式方法
private void styAdjustment(double adouble,float afloat){ System.out.println(Math.ceil(adouble)); // 返回大於等於引數的最小整數. System.out.println(Math.floor(adouble)); // 返回小於等於引數的最大整數. System.out.println(Math.rint(adouble)); // 返回與引數最接近的整數(若為0.5取偶數,即加一) System.out.println(Math.round(adouble)); // 將引數家上0.5返回與引數最近的整數 System.out.println(Math.round(afloat)); // 將引數加上0.5後返回與引數最近的整數,然後強轉為長整型. }
- 取絕對值,最大最小值的函式方法
/** *取最大值,最小值,絕對值函式方法. *其方法都過載有多個型別的,滿足不同型別引數的最大最小值,絕對值的獲取. */ private void stytakequals(double adouble,double adouble1){ System.out.println(Math.max(adouble,adouble1)); // 取兩個double型引數的最大值 System.out.println(Math.min(adouble,adouble1)); System.out.println(Math.abs(adouble)); // 返回double型引數的絕對值 }
-
隨機數
隨機數的獲取有兩種方式,Math.random方法給我們提供了double型隨機數的獲取.Random類則要更加廣泛一些,可以生成任何型別的隨機數.這裡直接通過程式碼表示了:
/** * 隨機數 * Math類中有提供random方法來生產隨機數. * 該方法預設生成0.0-1.0之間的double型隨機數. * 但該方法通過處理後還是可以生成任何範圍的隨機數的. * ;將該方法*n後強轉為int型輸出,可以得到0-n範圍的隨機數. * 而m+(int)Math.random()*n,將上面的式子+m後,就可以得到m-(m+n)範圍的隨機數. */ 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類提供各種型別隨機數的構造方法 * 通過例項化物件呼叫. * 比Math.random更為強大. */ private void styRandom(int n){ // 傳入引數n 控制範圍 Random random = new Random(10000); System.out.println(random.nextInt()); System.out.println(random.nextDouble()); }
關於random seedvalue的說明參看:
- 大數字運算
-
BigInteger類
BigInteger型別的數範圍比Integer類的要打的多,我們知道int型最大為2^31-1;而BigInteger類支援任意大小精度的整數.並且提供一些基本的運算方法,加減乘除等,這裡就不多加說明了,在BigInteger類的結構視窗中可以找到他們.
-
BigInteger類通過構造方法來直接將某個值轉換為BigInteger型別.其構造方法有很多.
private void styBigInteger(){ BigInteger bigInteger = new BigInteger("12345678901234567890"); // 直接通過構造法方法,將值轉為BigInteger型. BigInteger bigInteger1 = new BigInteger("43534645376574567314253543"); System.out.println(bigInteger.add(bigInteger1)); // 簡單的運算 }
-
BigDecimal類
相對的,BigInteger類只是針對與大整數之間的運算而BigDecimal類較其更加完善的一點就是,引入了小數概念,所以BigDecimal類支援任何精度的定點數.
同樣的BigDecimal類也提供有一些基本的運算方法.可以在類中檢視.
BigDecimal類也是通過構造方法直接轉換值的型別:
BigDecimal(double val)方法和BigDecimal(String val)方法.
BigDecimal bigDecimal = new BigDecimal(1231234345634.546756734563); BigDecimal bigDecimal1 = new BigDecimal("124235345645765.783452352342534");
關於java數字處理類就瞭解到這麼多了,其實其中還有很多方法都沒有涉及到,關於java的類庫,其中值得學習的,涵蓋著各個方面的類和方法,需要在之後的不斷學習的過程中不斷接觸瞭解才能夠漸漸掌握,這裡也僅僅只是對其中極少的一部分基本知識做總結學習.
-
後記
關於java語言的基本知識大致就學到這裡了,之後會新開一個筆記系列,接著學習java的核心知識,介面,繼承封裝,多型,類的高階特性,異常處理,Swing視窗程式設計.等等.
可以說這才是剛剛跨入java語言的門檻吧?任務還十分艱鉅,革命還需百倍努力啊!
之後我會在出一篇關於java初探階段的整理筆記,將這段時間的學習做一個總結歸納,並整理一下筆記的順序,捋一捋思路.
最後也祝願大家都能夠在自己前進的道路上披荊斬棘,共同進步,走向成功.
更新時間:
2019-4-10
22:06