浮點float與01比較為什麼

2021-03-19 18:19:02 字數 2392 閱讀 5958

1樓:

大多數浮點數是不精確的,比如這個例子裡的x=0.1,用2進製表示的話就是個回無限迴圈的2進位制答數(0.0000100010001..........

),也就是說用2進位制無法精確表示0.1

因為有這種情況的存在,所以對浮點數做比較時不能用==,常見的做法就是取二者的差,這個差的絕對值在一定的範圍內就認為二者是想等的,這個範圍多大就看作者的意圖了,並且不能超過精度範圍

所以if(x-0.1<=0.000001) 應該是if(fabs(x-0.1)<=0.000001)

java,為什麼float f1=0.1是錯的? 0.1是double型別的嗎?

2樓:一紙青辭

因為正反不能轉換,0.1是double型別。

對於任何一個float型別的浮點數,float型別的包裝類float提供了一個靜態方法floattointbit(float f)用於獲取

與f對應的32位二進位制資料流轉換為int型別的資料,然後返回這個int型別的資料

float f=0.1f;

system.out.println(float.floattointbit(f));//列印1036831949

把得到的數除以2求餘數

把餘數反過來得到32位二進位制資料:

0 01111011 10011001100110011001101

s=0 e=123 尾數部分的隱含位為1 所以尾數是1.10011001100110011001101

以上二進位制資料流對應的二進位制數**算表示式為:

(-1)^0*2^123-127*1.10011001100110011001101

即2^-4*1.10011001100110011001101

即2^23*1.10011001100110011001101*2^-27

即110011001100110011001101*2^-27

即13421773*2^-27

=0.100000001490116119384765625

與0.1誤差0.000000001490116119384765625

3樓:沈媛婷辣

java是強型別語言,在其中1.0預設是double型別,會自動認為是double型別的值,java不會為我們自動轉換,只會報錯提醒。

修改的方法有兩個:

明確指定0.1是個單精度浮點數,然後賦值給f1. 即 float f1= 0.1f ; //後加f

手動強制轉換  float f1 = (float) 0.1;

c#中「float taxrate = 0.1f」0.1後面的f是什麼意思?

4樓:子影

為了區分 float 和double,float型別最後加f;double型別最後加d

5樓:guo_軍

浮點數(小數) 有兩種型別: float 和double;為了區分,float型別最

後加f;double型別最後加d。

直接寫 0.1 預設是double的;

就是說 double taxrate = 0.1; 等同於 double taxrate = 0.1d;

float型在後面要加f。

【java是這樣的,c#應該也差不多】

6樓:8相約

王氏得知實情,亦責石榮無情無義,留胡氏在府,情同姐妹。胡氏未卜先知,令石榮頓生疑心。

7樓:仙藤紫霧

如果不用表示雙精度,付值給單精度會得到一個警告,加上代表單精度浮點

java,為什麼float f1=0.1是錯的? 0.1是double型別的麼?為什麼?謝謝

8樓:匿名使用者

java編譯器看到 0.1,會自動認為是double型別的值。

float f1 = 0.1; 會認為把一個雙精度的值賦予一個單精度浮點數。這種情況下,java不會為我們自動轉換,只會報錯提醒。修改的方法有兩個:

1. 明確指定0.1是個單精度浮點數,然後賦值給f1. 即 float f1= 0.1f ; //後加f

2. 手動強制轉換 float f1 = (float) 0.1; //看著好笨!呵呵

9樓:沒有響應

float f1=(float)0.1;

float f1=0.1f;

2種該法

10樓:匿名使用者

float f1=0.1f;

doublie d2=0.1;

11樓:匿名使用者

float f=0,1f

後面加個f....

桌上型電腦的主頻與筆記本的主頻比較,為什麼筆記本CPU都比桌上型電腦CPU的主頻低

1.主頻當然是一個概念,但是由於功率的問題,桌上型電腦的往往比筆記本的效能要強 2.不是,主頻 外頻 倍頻 3.這種情況除非是那個筆記本的整體配置比桌上型電腦強很多,可能桌上型電腦cpu技術 硬碟 記憶體老的原因吧。一般同等配置筆記本效能比桌上型電腦差很多,可能只有40 左右,甚至更低 筆記本採用的...

0x01與0x0001取或等於什麼?為什麼

無論是邏輯或運算還是按位或運算,結果都是1,邏輯或應該不用解釋了,對於按位或,兩個數就算型別不同,運算時比較也是最低位和最低位做或運算,最後結果還是1 0x01與0x0001 都是1,相或後,結果還是1 0x01或0x0001等於0x0101 0x01和0x0001的區別 0x01是一個位元組,8位...

請比較IS LM與AD AS模型。為什麼說AD AS模型是巨集觀經濟學的主要模型 它如何經濟狀態

確實是兩頭不可兼顧,總是在之間取平衡,但是光是巨集觀經濟學上的is lm模型和ad as模型是不能夠解決經濟現象的,還有要考慮到產業經濟學 分別在is lm模型和ad as模型中分析下列政策對巨集觀經濟的影響。1 1 此舉屬於寬鬆的貨幣政策,表現在lm曲線右移,利率會下降,收入增加。巨集觀經濟 用i...