How to convert a double to long without casting?

Viewed 364554

What is the best way to convert a double to a long without casting?

For example:

double d = 394.000;
long l = (new Double(d)).longValue();
System.out.println("double=" + d + ", long=" + l);
8 Answers

Assuming you're happy with truncating towards zero, just cast:

double d = 1234.56;
long x = (long) d; // x = 1234

This will be faster than going via the wrapper classes - and more importantly, it's more readable. Now, if you need rounding other than "always towards zero" you'll need slightly more complicated code.

... And here is the rounding way which doesn't truncate. Hurried to look it up in the Java API Manual:

double d = 1234.56;
long x = Math.round(d); //1235

(new Double(d)).longValue() internally just does a cast, so there's no reason to create a Double object.

Simply by the following:

double d = 394.000;
long l = d * 1L;

Simply put, casting is more efficient than creating a Double object.

Related