Friday, 8 April 2011

Double.NaN Definition

The Double class defines a little understood value of NaN - or ‘Not A Number’. This sounds pretty simple at first glance, after-all an alphanumeric String is not a number - isn’t it?

It turns out that you’ll never know as Double.valueOf(...) or Double.parseDouble(...) will throw a NumberFormatException exception if you try to do something like:


…so although the string “test” is not a number, it’ll never be Double.NaN.

Double.NaN is in fact defining a few very specific mathematical cases, with the most obvious one being the divisions 0/0 and ±∞/±∞ For a complete list take a look at wikipedia.

  /** Definition of Not a Number */
public static final double NAN = 0.0d / 0.0;

public static void main(String[] args) {

// This will print false
boolean test = Double.isNaN(2.2);
("isNaN Test Result: " + test);

// This will print true
test = Double.isNaN(NAN);
("isNaN Test Result: " + test);

// A Double.NaN + a double remains as Double.NaN
Double d = Double.NaN + 1.0;

// This will throw a NumberFormatException
Double invalid = Double.valueOf("test");
("This is invalid: " + invalid);


No comments: