Well first of all, a double is just a more precise float.
http://gafferongames.com/game-physics/fix-your-timestep/
http://www.isaacsukin.com/news/2015/01/detailed-explanation-javascript-game-loops-and-timing
Your game logic needs to be capable of updating at some minimum frame rate (e.g., 60 hz). While your game can be written to use a variable time step, the size of the time-step should not change between loops (that is, it should be defined as a constant somewhere). This is especially true if you're writing a networked game.
In your main loop, you calculate the time delta between now and the last mainloop execution, and you add this delta time to some accumulator variable (a double, usually). When the accumulator is greater than the fixed time-step (e.g. accumulator >= 1.0/60), then you subtract the timestep from the accumulator and you tic your logic forward by one tic.
Using this method, you can render the game at whatever framerate the user's device will allow. If the game can't render at the same rate that the logic is updating at, then you will have to do several logic updates per main loop. You might also need to interpolate between the current state and the penultimate state (i.e., state at current_tic - 1) and draw things "slightly in the past" in order to make your render more smooth. (But if it's a simple game, you can probably just do logic and drawing at 60 Hz).
So, you should be storing "tics" as an integral value and "time" as a continuous (double) value.