1. 程式人生 > 其它 >Java:科學技術法和判斷變數的型別

Java:科學技術法和判斷變數的型別

原因

之前用C++敲程式碼,用科學技術法一直都是寫的整數型別,現在到Java裡面發現居然報錯,是個浮點數。

//不報錯
int a = 1e5 + 10;
//報錯
int a = 1e5 + 10;
float a = 1e5 + 10;

//不報錯
double a = 1e5 + 10;

關於Java的科學計數法

在Java中,當Double的取值符合某條件時,將會以科學計數法的方式顯示(下面是個人測試的結果,非從文件中得到的結論):

@Test
public void testPrintScientificNotation() {
    //整數部分位數大於等於8時開始以科學計數法顯示
    System.out.println(-12345678.0);
    System.out.println(12345678.0);
    //整數位為0,當小數位以0開始連續出現大於等於3時開始以科學計數法顯示
    System.out.println(0.0001);
    System.out.println(-0.0001);
}
結果

-1.2345678E7
1.2345678E7
1.0E-4
-1.0E-4

很多時候,我們需要做一個統一,要麼全部以科學計數法輸出,要麼就全部顯示為普通計數。根據網上的資料,主要提及NumberFormat、DecimalFormat、BigDecimal這三種API實現方式。
(詳情請看文末的參考)


判斷變數型別

第一種:反射

使用反射的方法: 變數名.getClass().getSimpleName()來判斷。這個可以判斷科學計數法表示的變數,但需要強轉Object。

例:


public static void main(String[] args ){
        double a = 1e5 + 10;
        Object aa = (Object)a;
        System.out.println( aa.getClass().getSimpleName() );
}

第二種:instanceof

這種也是無法直接判斷,需要強轉Object

public static void main(String[] args ){
        double a = 1e5 + 10;
        Object aa = (Object)a;
//注意這裡不要instanceof int會報錯,我嘗試的時候還以為instance無法判斷,後面想到可能是包裝類的問題
        System.out.println( (aa instanceof  Integer ));
}

結果:


參考:

  1. 科學計數法
  2. 判斷變數型別