導航:首頁 > 編程語言 > javafloat和double

javafloat和double

發布時間:2023-05-21 01:46:38

1. java double和float的區別

1、內存結構
float和double的范圍是由指數的位數來決定的。
float的指數位有8位,而double的指數位有11位,分布如下:
float:
1bit(符號位)
8bits(指數位)
23bits(尾數位)
double:
1bit(符號位)
11bits(指數位)
52bits(尾數位)
於是,float的指數范圍為-128~+127,而double的指數范圍為-1024~+1023,並且指數位是按補碼的形式來劃分的。
其中負指數決定了浮點數所能表達的絕對值最小的非零數;而正指數決定了浮點數所能表達的絕對值最大的數,也即決定了浮點數的取值范圍。
float的范圍為-2^128
~
+2^127,也即-3.40e+38
~
+3.40e+38;double的范圍為-2^1024
~
+2^1023,也即-1.79e+308
~
+1.79e+308。
2.
精度
float和double的精度是由尾數的位數來決定的。浮點數在內存中是按科學計數法來存儲的,其整數部分始終是一個隱含著的「1」,由於它是不變的,故不能對精度造成影響。
float:2^23
=
8388608,一共七位,由於最左為1的一位省略了,這意味著最多能表示8位數:
2*8388608
=
16777216
。有8位有效數字,但絕對能保證的為7位,也即
float的精度為7~8位有效數字
double:2^52
=
4503599627370496,一共16位,同理,
double的精度為16~17位
之所以不能用f1==f2來判斷兩個數相等,是因為雖然f1和f2在可能是兩個不同的數字,但是受到浮點數表示精度的限制,有可能會錯誤的判斷兩個數相等!

2. 知乎 java float和double的區別

float a =10.23f;
double b=10.23;
1.float和double的區別:聲明的float 的變數a,賦值後必須加:虧滲f ,如float a =10.23f;
而double則不需要,也就是誰double b=10.23;
2.double精確轎拍度比float大,double=10.23566558866557654556;
float=10.235665588665;銷帆脊

3. java float double精度為什麼會丟失

由於對float或double的使用不當,可能會出現精度丟失的問題。問題大概情況可以通過如下代碼理解:


publicclassFloatDoubleTest{
publicstaticvoidmain(String[]args){
floatf=20014999;
doubled=f;
doubled2=20014999;
System.out.println("f="+f);
System.out.println("d="+d);
System.out.println("d2="+d2);
}
}


得到的結果如下:

f=2.0015E7
d=2.0015E7
d2=2.0014999E7

從輸出結果可以看出double可以正確亮信的表示20014999,而float沒有辦法表示20014999,得到的只是一個近似值。這樣的結果很讓人訝異。20014999這么小的數字在float下沒辦法表示。於是帶著這個問題,做了一次關於float和double學習,做個簡單分享,希望有助於大家對java浮點數的理解。

關於java的float和double

Java語言支持兩種基本的浮點類型:float和double。java的浮點類型都依據IEEE754標准。IEEE754定義了32位和64位雙精度兩種浮點二進制小數標准。

IEEE754用科學記數法以底數為2的小數來表示浮點數。32位浮點數用1位表示數字的符號,用8位來表示指數,用23位來表示尾數,即小數部分。作為有符號整數的指數可以有正負之分。小數部分用二進制(底數2)小數來表示。對於64位雙精度浮點數,用1位表示數字的符號,用11位表示指數,52位表示尾數。如下兩個圖來表示:


float(32位):

綠色部分是符號位,紅色部分是冪指數,藍色部分是尾數。

對比可以得出:符號位都是0,冪指數為移碼表示,兩者剛好也相等。唯一不同的是尾數。

在double的尾數為:,省略後面的零,至少需要24位才能正確表示。

而在float下面尾數為:00110001011001111001100,共23位。

為什麼會這樣?原因很明顯,因為float尾數最多隻能表示23位,所以24位的001100010110011110010111在float下面經過四捨五入變成了23位的00110001011001111001100。所以20014999在float下面變成了20015000。

也就森禪是說20014999雖然是在float的表示範圍之內,但在IEEE754的float表示法精度長度沒有辦法表示出20014999,而只能通過四捨五入得到一個近似值。

總結:

浮點運算很少是精確的,只要是超過精度能表示的范圍就會產生誤差。往往產生誤差不是因為數的大小,而是因為數的精度。因此,產生的結果接近但不等於想要的結果。尤其在使用float和double作精確運算的時候要特別小心。

可以考慮採用一些替代方案來實現。如通過String結合BigDecimal或者通過使用long類型來轉換。

4. java中float和double的取值范圍是什麼

1、float:4位元組(32bit),IEEE 754。取值范圍:

[-3.40282346638528860e+38 , -1.40129846432481707e-45] ∪ [1.40129846432481707e-45 ~ 3.40282346638528860e+38] 。

2、毀芹double: 8位元組(64bit) ,IEEE 754。取值范圍:

[-1.79769313486231570e+308,-4.94065645841246544e-324] ∪ [4.94065645841246544e-324,1.79769313486231570e+308] 。

(4)javafloat和double擴展閱讀:

float和double的范圍精度

float和double的精度是由尾數的位數來決定的。浮點數在內存中是按科學計數法來存儲的,其整數部分始終是一個隱含著的「1」,由於它是不變的,故不能對精度造成影響。纖攜畢

float:2^23 = 8388608,共七位,意味著最多能有7位有效數字,但絕對能保證的為6位,也即float的精度為6~7位有效數字;

double:2^52 = 4503599627370496,一共16位,同理,隱汪double的精度為15~16位。

5. 在java中double型和float常量有什麼區別啊

1.
我感覺你可能更想問的問題是:java中敏轎double和float類型有和區別?建議修改問題,把【常量】二字去掉;
2.
這兩種數據類型的主要區別是:double取值范圍和精度比float都要高;
3.
java中,次要區別是二者在變數定義上有些不同,比如:floath
a
=
2.3f;
double
a
=
2.3;float類型值後面有一賀賣個f;
4.
在很多環境下(java/C#.....)他們橋拍肆的區別大約都是以上這些。

6. java double和float的區別

一、float是單精度類型,精度是8位有效數字,取值范圍是10的-38次方到10的38次方,float占 用4個位元組的存儲空間
二、double是雙精度類型,精度是17位有效數字,取值范圍是10的-308次方到10的308次 方,double佔用8個位元組的存儲空間
三、當你不聲明的時候,默認小數都用double來表示,所以如果要用float的話,則應該在其 後加上f
例如:float a=1.3f;如果寫作:float a=1.3;
則會提示不能將double轉化成float 這成為窄型轉化
如果要用float來修飾的話,則應該使用float a=1.3f
四、注意float是8位有效數字,第7位數字將會產生四捨五入
所以如果一個float變數 這樣定義: float a=1.32344435f; 則第7位將產生四捨五入(5及5 以下的都將捨去)
五、轉載至http://www.360doc.com/content/17/0501/18/42534750_650101155.shtml

7. java中float和double的取值范圍是什麼

float:4位元組(32bit),IEEE 754. 取值范圍:

[-3.40282346638528860e+38 , -1.40129846432481707e-45] ∪ [1.40129846432481707e-45 ~ 3.40282346638528860e+38] 。

double: 8位元組(64bit) ,IEEE 754. 取值范老咐圍:

[-1.79769313486231570e+308,-4.94065645841246544e-324] ∪ [4.94065645841246544e-324,1.79769313486231570e+308] 。

(7)javafloat和double擴展閱讀

基本數據類型的特點,位數,最大值和最小值。

1、

基本類型:short 二進制位數:16

包裝類:java.lang.Short

最小值:Short.MIN_VALUE=-32768 (-2的15此方)

最大值:Short.MAX_VALUE=32767 (2的15次方-1)

2、

基本類型:int 二進制位數:32

包裝類:java.lang.Integer

最小值:Integer.MIN_VALUE= -2147483648 (-2的31次方)

最大值:Integer.MAX_VALUE= 2147483647 (2的31次方-1)

3、

基本類型:long 二進制位數:64

包裝類:java.lang.Long

最小值:Long.MIN_VALUE=-9223372036854775808 (-2的63次方)

最大值:Long.MAX_VALUE=9223372036854775807 (2的63次方-1)

4、

基本類型:float 二進制位數:32

包裝雀含旦類:java.lang.Float

最小值:Float.MIN_VALUE=1.4E-45 (2的-149次方)

最大值:Float.MAX_VALUE=3.4028235E38 (2的128次方-1)

5、

基本類型:double 二進制位數:64

包裝類:java.lang.Double

最小值:Double.MIN_VALUE=4.9E-324 (2的-1074次方)

最大值:Double.MAX_VALUE=1.7976931348623157E308 (頃擾2的1024次方-1)

8. java 中float 和double有什麼區別,對於賦值來說,求解。謝謝!

  1. float為單精度浮點類型,佔4個位元組,能表示的數范圍小;double為雙精度浮點類型,佔8個位元組,能表示的數范圍大。

  2. 對於賦值來說,因為聲明浮點數時默認為double類型,所以float需要在數的的後面添加f/F;

    例:

    float a=1.2 //錯誤

    float a=1.2f //正確

    float a=1.2F //正確

    double b=1.2 //正確

    double b=1.2d //正確

    double b=1.2D //正確

9. java中float和double的區別

float表示單精度浮點數在機內佔4個位元組,用32位二進制描述。
double表示雙精度浮點數在機內佔8個位元組,用64位二進制描述。
浮點數在機內用指數型式表示,分解為:數符,尾數,指數符,指數四部分。
數符佔1位二進制,表示數的正負。
指數符佔1位二進制,表示指數的正負。
尾數表示浮點數有效數字,0.xxxxxxx,但不存開頭的0和點
指數存指數的有效數字。
指數佔多少位,尾數佔多少位,由計算機系統決定。
可能是數符加尾數佔24位,指數符加指數佔8位 -- float.
數符加尾數佔48位,指數符加指數佔16位 -- double.
知道了這四部分的佔位,按二進制估計大小范圍,再換算為十進制,就是浮點數的數值范圍。
編程人員來說,double 和 float 的區別是double精度高,有效數字16位,float精度7位。但double消耗內存是float的兩倍,double的運算速度比float慢得多,java語言中數學函數名稱double 和 float不同,不要寫錯,能用單精度時不要用雙精度(以省內存,加快運算速度)。

10. java float和double的區別

單精度浮點數(float)與雙精度浮點數(double)的區別如下:
(1)在內存中佔有的位元組數不同
單精度浮點數在機內佔4個位元組
雙精度浮點數在機內佔8個位元組
(2)有效數字位數不同
單精度浮點數有效數字8位
雙精度浮點數有效數字16位
(3)所能表示數的范圍不同
單精度浮點的表示範圍:-3.40E+38 ~ +3.40E+38
雙精度浮點的表示範圍:-1.79E+308 ~ +1.79E+308
(4)在程序中處理速度不同一般來帆茄說,CPU處理單精度浮態褲察點數的純氏速度比處理雙精度浮點數快

閱讀全文

與javafloat和double相關的資料

熱點內容
creo五軸編程光碟 瀏覽:10
蘋果app網路驗證在哪裡 瀏覽:14
博科清空命令 瀏覽:384
簡愛英文pdf 瀏覽:376
cnc編程有前途嗎 瀏覽:586
聯想app怎麼聯網 瀏覽:722
linuxftp命令登錄 瀏覽:1000
android獲取圖片縮略圖 瀏覽:646
神戶制鋼螺桿壓縮機 瀏覽:29
差分演化演算法 瀏覽:567
中山市加密軟體 瀏覽:446
mc反編譯源碼 瀏覽:139
企業商城網站源碼 瀏覽:411
shell腳本編程是什麼 瀏覽:762
單片機led閃爍匯編 瀏覽:203
點淘app怎麼沒金蛋了 瀏覽:878
app拉新哪裡找推廣碼 瀏覽:935
哪個app生活服務好 瀏覽:108
mht安卓用什麼軟體打開 瀏覽:320
html5即時通訊源碼 瀏覽:144