Ok so, first of all i made a double = 0.05, but when running the debugger it shows up as 0.04999. I know this has something to do with how doubles store but its causing problems for me. Anyway, in the code I'm trying to get only the right hand side(rhs) of the double variable jdn's decimal point. So in the code example I'm only trying to get .05. But rhs isn't always going to be the same and can have up to 0.00005 <- that fifth one there(can't remember what its called - hundred thousandth?). I have constant numbers right now for the sake of testing this. Now the counter goes through starting at 0.1, to make sure everything after the decimal point is 0. It goes through fine until it gets to 0.0002 - 0.0001 and then rhs = 9.99998e-005.
modf still returns the 0.05 as 0.049999999813735485. The main problem is when counter gets to 0.0001 and then tries to go to 0.00001 it becomes 1.0000000000000004e-005.
If you want to determine fractional part of a number then use modf, as firedraco said.
You must understand that doubles are not precise. 2454115.05 is not even representable in a double precision floating-point format. Variable 'jdn' is actually set to the nearest representable number, that is 2454115.049999999813735485076904296875.
I'm not sure if I understood your question correctly, but anyway
9.99998e-005
is a number which value is represented in a scientific notation. It means
9.99998 * 10^-5
what is a little less than
0.0001
As you can see, calculations are correct.
If you would like to see 0.0001 rather than 9.99998e-005 then you must configure the stream appropriately. By default, if the given value is small enough, it is printed in a scientific notation because otherwise it would be very long (or zero would need to be printed). You can force a fixed notation, for example by doing something similar to: