2009-11-27 30 views
1

我將四個字節轉換爲浮點數,結果我得到了NaN,但我想要的值爲0.0。我究竟做錯了什麼?Java中的NaN問題

這是我的代碼:

public class abc 
{ 
    public static void main(String[] args) 
    { 
     int[] arry = { 255, 255, 255, 255 }; 
     int num = ((arry[0] << 24) & 0xFF000000) | ((arry[1] << 16) & 0xFF0000) 
      | ((arry[2] << 8) & 0xFF00) | (arry[3] & 0xFF); 
     float f = Float.intBitsToFloat(num); 

     f= (float) ((f < 0 ? Math.ceil(f * 10) : Math.floor(f * 10))/10); 

     System.out.println(f); 
    } 
} 
+0

這個問題的背景是什麼? – starblue 2009-11-27 09:59:00

回答

3

那麼,你的位模式恰好實際上楠:

IEEE 754 NaN是代表與充滿者和一些非指數領域有效數字中的零數字。 IEEE floating-point標準單精度NaN的按位示例:x111 1111 1axx xxxx xxxx xxxx xxxx xxxx其中x表示don't care。如果a = 1,它是一個安靜的NaN,否則它是一個信號NaN。

由於所有你的位是1,這顯然符合上述標準,是一個安靜的NaN(雖然Java IIRC甚至不支持安靜或信號NaN)。

6

你的主要問題是0xFFFFFFFF的確是NaN。

浮子爲0的值是0 ...

改變陣列

int[] arry = { 0x00, 0x00, 0x00, 0x00 }; 

將所得到的值改變爲0.0f浮動。

0

NaN =不是數字,iaw,位模式0xFFFFFFFF不代表 浮點數 數字。 (約阿希姆,你是對的..再次:-))

+0

然後該怎麼做才能得到正確的值 – sanjana 2009-11-27 10:02:02

+1

'NaN'是一個浮點值,否則不能將其存儲在'float'變量中。它只是不是一個數字;-) – 2009-11-27 10:05:23

+0

你期望哪個值,什麼是'正確的'?如果你想'0.0f',那麼使用{0,0,0,0} int數組。如果你想讓相應的float爲0xffffffff,那麼只需要cast('float f =(float)num') – 2009-11-27 10:06:07