That's normal behaviour for floating point calculations.
There is only a limited number of values that can be represented exactly in the binary floating point format used, so most values are represented as the closest possible value.
A value like 7.99
might be represented as something like 7.98999999999997754
, so that's the value that you actually get when the code is parsed.
The difference between the actual value and the value that you expect is so small that it doesn't show up when you just display the value directly, as the value is rounded when it is turned back into a string format. When you do several calculations the small differences add up, and sooner or later you will see it.
The result that you get is -0.0000000000000017763568394002505
, so that is very close to zero, but it's not exactly zero.