Quote from PocketChange:
In binary, there is no way to write 9.95 in a finite number of bits. The closest to you can get to 9.95 in a 64-bit IEEE float is 9.949999999999999289457264239899814128875732421875. So when you type "9.95", understands the number will be the much longer value shown above. And that value rounds down.
This kind of problem comes up all the time when dealing with floating point binary numbers. The general rule to remember is that most fractional numbers that have a finite representation in decimal (a.k.a "base-10") do not have a finite representation in binary (a.k.a "base-2"). And so they are approximated using the closest binary number available. That approximation is usually very close, but it will be slightly off and in some cases can cause your results to be a little different from what you might expect.
Consider following FINRA's lead and standardize all price values to be represented as integers with 6 decimals of precision.
9.95 = 9950000
2012-09-27 18:47:18.250 = 1348771638250
Use integer prices and timestamps internally, these integers can be converted to a time string, floating or a double-precision value. But for absolute performance critical code, they allow integer math to be performed and typically require less storage. If you do any type of database work you'll see significant performance benefits using integer time stamps as primary keys.
Throwing more hardware at the issue doesn't fix the small approximation errors introduced that will inevitably bite you somewhere down the chain.