Floating-point types (and calculations) are imprecise in nature. They work in binary, not in decimal, and hence calculations yield “unexpected” decimal values.
Compare it with this:
Console.WriteLine((197688 * 0.1m) == 19768.800000000003m); // False
Console.WriteLine((197688 * 0.1m) == 19768.8m); // True
The result is as you'd expect, because decimal
is used. As the name suggests, it's suited for decimal calculations because of its internal representation.
Side note: The rule of thumb is never use floating-point types for monetary calculations. Exactly becuase of precision issues with decical values.