- 前言
在我們的日常開發(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 {

DecimalFormat類用以格式化十進制數(shù)字.他可以將一些數(shù)字格式化為整數(shù),浮點數(shù),百分數(shù)等.通過該類可以為要輸出的數(shù)字加上單位或控制數(shù)字的精度.一般通過實例化DecimalFormat對象是傳遞數(shù)字格式,也可以通過類中的applyPattern方法來實現(xiàn)數(shù)字的格式化.
需要注意的是:
在格式化數(shù)字的時候,DecimalFormat類中使用了一些特殊字符構成一個格式化的模版,使數(shù)字按照一定的特殊字符來進行匹配.

- 格式化方法體的代碼
// 第一種格式化方法,直接通過構造方法傳入格式控制參數(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)用.


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ù)方法

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ù)方法

/**
* 取最大值,最小值,絕對值函數(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類通過構造方法來直接將某個值轉換為BigInteger類型.其構造方法有很多.

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



