1

我将四个字节转换为浮点数,NaN结果得到了,但我想要 value 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 的浮点数是... 0。

将数组更改为

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

将结果值更改为0.0f浮点数。

于 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)。

于 2009-11-27T09:54:48.333 回答
0

NaN = 不是数字,iaw,位模式 0xFFFFFFFF 不代表浮点值数字。(约阿希姆,你是对的......再次:-))

于 2009-11-27T09:57:53.703 回答