455,806 Members | 1,380 Online Need help? Post your question and get tips & solutions from a community of 455,806 IT Pros & Developers. It's quick & easy.

# Why won't my doubles hold their decimals?

 P: 3 I am trying to write a program to create boundaries for a polygon on a two-dimensional coordinate plane. Here is my code: Expand|Select|Wrap|Line Numbers public class Example { public Example()     {         for (int y = 0; y < game1.o.l; y++)         {             System.out.println("( "+game1.o.bind[y]+", "+game1.o.bind[y]+" ) -> ( "+game1.o.bind[y]+", "+game1.o.bind[y]+" )\n");         }     } public class Obstacle {                 int cx, cy, dx, ex, ey;                 int w, l;                 double aw;                 int[][] bind;                 public Obstacle( int a, int cax, int cay, int eax, int eay, int dax )                 {                 cx = cax;                 cy = cay;                 dx = dax;                 ex = eax;                 ey = eay;                 w = ex - dx;                 l = ey - cy + 1;                 aw = (cx - dx)/(l - 1);                 System.out.println(aw+"\n");                 bind = new int[l];                  for ( int y = 0; y < l; y++ )                 {                     bind[y] = (int)Math.round( cx - ( aw * y ) );                     bind[y] = cy + y;                     bind[y] = (int)Math.round( cx - ( a * aw * y ) + w );                     bind[y] = cy + y;                 }             }         } } Sorry it looks so messy. Anyways, when I ran it, it gives me this: Expand|Select|Wrap|Line Numbers run: 0.0   0.0   0.0   0.0   ( 10, 10 ) -> ( 15, 10 )   ( 10, 11 ) -> ( 15, 11 )   ( 10, 12 ) -> ( 15, 12 )   ( 10, 13 ) -> ( 15, 13 )   ( 10, 14 ) -> ( 15, 14 )   ( 10, 15 ) -> ( 15, 15 )   ( 10, 16 ) -> ( 15, 16 )   ( 10, 17 ) -> ( 15, 17 )   ( 10, 18 ) -> ( 15, 18 )   ( 10, 19 ) -> ( 15, 19 )   ( 10, 20 ) -> ( 15, 20 )   BUILD SUCCESSFUL (total time: 0 seconds)   What am I doing wrong? Jun 2 '12 #1
4 Replies

 Expert Mod 10K+ P: 12,422 How can that code even run? You're dividing by 0, that should throw an error. Jun 3 '12 #2

 P: 3 @Rabbit The only place where division occurs is in line 23, and the only way you can divide by zero is if there is no difference between cy and ey, meaning the shape is a line, which I would not do within the parameters of this program. Although perhaps your confusion is related to that fact that I somehow forgot a certain line of code: Expand|Select|Wrap|Line Numbers Obstacle o = new Obstacle(1,10,10,10,20,5); Or maybe it's just because l and 1 look a bit alike in the code font. Jun 3 '12 #3

 Expert Mod 10K+ P: 12,422 That's probably what it was. It looked like one minus one to me. The reason you're not getting a fraction is probably because all the math is on ints. Change the 1 to 1.0 and that should force it into float math. Jun 4 '12 #4

 P: 8 IEEE floating point numbers cannot represent exact decimal values. Base 2 is not Base 10. Jun 4 '12 #5 