Java 中的 NaN 问题

问题描述 投票:0回答:3

我正在将四个字节转换为浮点数,结果得到

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);
    }
}
java floating-point nan
3个回答
6
投票

你的主要问题是

0xFFFFFFFF
确实是一个 NaN。

值为 0 的浮点数是... 0.

将数组更改为

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

将结果值更改为

0.0f
浮点数。


3
投票

好吧,你的位模式实际上恰好是 be NaN:

IEEE 754 NaN 用充满 1 的指数字段和有效数中的一些非零数字表示。 IEEE 浮点 标准单精度 NaN 的逐位示例: x111 1111 1axx xxxx xxxx xxxx xxxx xxxx,其中 x 表示 不关心。如果 a = 1,则它是一个安静的 NaN,否则它是一个信号 NaN。

由于all你的位都是1,它显然符合上述标准并且是一个quiet NaN(尽管Java iirc甚至不支持quiet或signaling NaN)。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.