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...