Java 中的 NaN 问题
我将四个字节转换为浮点数,结果得到 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);
}
}
I am converting four bytes to float and I'm getting NaN
as a result, but I want the value 0.0
. What am I doing wrong?
This is my code:
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);
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您的主要问题是
0xFFFFFFFF
确实是 NaN。值为 0 的浮点数是... 0。
将数组更改为
将结果值更改为
0.0f
浮点数。Your main problem is that
0xFFFFFFFF
is indeed a NaN.A float with a value of 0 is... 0.
Changing the array to
Will change the resulting value to a
0.0f
float.好吧,你的位模式实际上恰好是 NaN:
由于所有位都是1,因此它显然符合上述标准,并且是一个安静NaN(尽管Java iirc甚至不支持安静或信号NaN)。
Well, your bit pattern happens to actually be NaN:
Since all your bits are 1, it obviously fits above criteria and is a quiet NaN (although Java iirc doesn't even support quiet or signalling NaNs).
NaN = 不是数字,iaw,位模式 0xFFFFFFFF 不代表
float value数字。 (约阿希姆,你是对的..再次:-))NaN = Not a Number, iaw, the bit pattern 0xFFFFFFFF does not represent a
float valuenumber. (Joachim, you're right .. again :-) )