1

4 バイトを float に変換していますNaNが、結果として取得していますが、値が必要です0.0。私は何を間違っていますか?

これは私のコードです:

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);
    }
}
4

3 に答える 3

6

あなたの主な問題は、それ0xFFFFFFFFが実際に NaN であることです。

値が 0 の float は... 0 です。

配列をに変更する

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

結果の値を0.0ffloat に変更します。

于 2009-11-27T09:55:15.323 に答える
3

さて、あなたのビット パターンはたまたまNaN です

IEEE 754 NaN は、1 で埋められた指数フィールドと仮数部のゼロ以外の数で表されます。IEEE 浮動小数点標準の単精度 NaNのビット単位の例: x111 1111 1axx xxxx xxxx xxxx xxxx xxxx x はdon't careを意味します。a = 1 の場合はクワイエット NaN であり、それ以外の場合はシグナリング NaN です。

すべてのビットが 1 であるため、明らかに基準を超えており、静かな NaNです(ただし、Java iirc は静かな NaN またはシグナリング NaN をサポートしていません)。

于 2009-11-27T09:54:48.333 に答える
0

NaN = 数値ではありません。つまり、ビット パターン 0xFFFFFFFF は浮動小数点数を表していません。(ヨアヒム、あなたは正しい..再び:-))

于 2009-11-27T09:57:53.703 に答える