English 中文(简体)
NaN problem in Java
原标题:

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);
    }
}
问题回答

Your main problem is that 0xFFFFFFFF is indeed a NaN.

A float with a value of 0 is... 0.

Changing the array to

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

Will change the resulting value to a 0.0f float.

Well, your bit pattern happens to actually be NaN:

IEEE 754 NaNs are represented with the exponential field filled with ones and some non-zero number in the significand. A bit-wise example of a IEEE floating-point standard single precision NaN: x111 1111 1axx xxxx xxxx xxxx xxxx xxxx where x means don t care. If a = 1, it is a quiet NaN, otherwise it is a signalling 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 = Not a Number, iaw, the bit pattern 0xFFFFFFFF does not represent a float value number. (Joachim, you re right .. again :-) )





相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签