9

Here's an example:

Double d = (1/3);
System.out.println(d);

This returns 0, not 0.33333... as it should.

Does anyone know?

Motti
  • 105,704
  • 46
  • 182
  • 255
oletk
  • 105
  • 1
  • 1
  • 9

3 Answers3

38

That's because 1 and 3 are treated as integers when you don't specify otherwise, so 1/3 evaluates to the integer 0 which is then cast to the double 0. To fix it, try (1.0/3), or maybe 1D/3 to explicitly state that you're dealing with double values.

jjnguy
  • 133,300
  • 52
  • 294
  • 323
Firas Assaad
  • 23,880
  • 16
  • 59
  • 78
12

If you have ints that you want to divide using floating-point division, you'll have to cast the int to a double:

double d = (double)intValue1 / (double)intValue2

(Actually, only casting intValue2 should be enough to have the intValue1 be casted to double automatically, I believe.)

coobird
  • 156,222
  • 34
  • 208
  • 226
1

Use double and not Double unless you need to use these values in the object sense. Be aware about the Autoboxing concepts

Vijay Dev
  • 25,766
  • 20
  • 75
  • 96
  • The OP was asking about Java's truncation methods and why a division of integers is truncated, even if stored in a double; not about autoboxing. – ameed Jul 23 '13 at 03:59