Java:科學技術法和判斷變數的型別
阿新 • • 發佈:2022-03-10
原因
之前用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 ));
}
結果:
參考: