1.72為係數(或尾數)
10^-3為指數
10為指數的基數
-3位為指數的階數
科學計數法表示為1.72E-3,由於1<=1.72<10,因此稱係數是規格化的。單精度浮點數32位=1位符號位+8位指數位+23位有效數字雙精度浮點數64位=1位符號位+11位指數位+52位有效數字下面以單精度浮點數為例(雙精度同理),來看看計算機是如何存儲的。符號位:1表示負值,0表示正值;
指數位:階數的二進位碼,是一個無符號的整數,但是階數既可以是正數也可以是負數,那麼就需要有一個偏移量(單精度偏移量為127,雙精度偏移量為1023),則真正的階數=階數移碼-偏移量。指數位的範圍為0~255,但不包括0和255,因為它倆有特殊含義(下面會說到),因此單精度浮點數可表示的最大階數為127=254-127,最小階數為-126=1-127;
有效數字:任何一個二進位的科學計數法(規格化)的係數第一位都是1,因此這個1沒有必要存儲,有效數字存儲的都是小數點後23位,因此23位有效數字可表示的精度卻是24位;
符號位s指數位e有效數字m浮點數0、10000、10!=00.0f02550無窮大12550無窮小0、1255!=0NAN// 3.4028235E38
System.out.println(Float.MAX_VALUE);
// 不受限制的最小值,1.4E-45
System.out.println(Float.MIN_VALUE);
// 規格化的最小值,1.17549435E-38
System.out.println(Float.MIN_NORMAL);
小數的二進位無法精確地表示,但是整數可以
單精度和雙精度類型混合使用
// 0.8999999999999999
System.out.println(2-1.1);
浮點數的意思是小數點可以變動,在計算機中是依賴指數實現的。比如56.78*10^0 = 5.678*10^1 = 567.8*10^-1,它們的大小相同,區別是小數點的位置不同,指數的大小也不同;
而定點數,顧名思義就是小數點不能變動,例如Mysql中的decimal類型。