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實現方式。
(詳情請看文末的參考)


***

0x表示

  • 如果你寫一個0x80;那么會把這0,1位串在內存中鋪開,並且是32位的一個int,不夠32位,則前面補0。
  • 如果在強制轉換成一個byte,則會把前面全部截掉,保留后8位。
  • 如果是0x80L,則是64位的。

一次如果你想直接用位來表示數字就可以寫成0x的形式。


public class Test {
	
	public static void main(String[] args) {
		
		int a = 0x2f;//小寫十六進制(等價於0x002f)
		System.out.println(Integer.toBinaryString(a));        //101111


		
		int b = 0x2F;//大寫十六進制
		System.out.println(Integer.toBinaryString(b));        //101111
		
		int c = 10;//標准十進制
		System.out.println(Integer.toBinaryString(c));        //1010
		
		int d = 010;//以零開頭,表示八進制
		System.out.println(Integer.toBinaryString(d));        //1000
		
		
		
		char e = 0xff;//char為2個字節,16位
		byte f = 0xf;//byte為8位
		short g = 0xff;//short為2個字節,16位
		System.out.println(Integer.toBinaryString(e));        //11111111
		System.out.println(Integer.toBinaryString(f));       // 1111
		System.out.println(Integer.toBinaryString(g));      //11111111
 
	}
}



判斷變量類型

第一種:反射

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

例:


public static void main(String[] args ){
        double a = 1e5 + 10;
//必須要轉成object這樣才能用反射判斷類型
        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. 判斷變量類型
  3. 0x


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM