OK, after reading that article (thank you Paul) and many others, I added modified every calculation I was using that involved a decimal value (.18 for tax, .07 for surcharge and .015-.035 fro discount) to the following tResults.
The above may work for your case specifically...
but it is not guaranteed to give you the answer you expect for every possible input (such is the nature of working with floating point).
0.005 cannot be represented in a double so this value is going to end up being an approximation.
tResult equally is not accurate but an approximation.
the end result might be just a notch too high or a notch too low causing floor() to return the wrong value.
The end divide by 100 again introduces additional inaccuracies.
There are methods so you can correct the inaccuracies on each step but this isn't easy stuff, there's reasons why the recommendation is to simply avoid it altogether. :p