This is because 19.90 is not exactly representable in base 2, and the closest approximation is slightly lower than 19.90.
Namely, this closest approximation is exactly 2 ^ -48 × 0x13E6666666666666. You can see its exact value in decimal form here if you are interested.
This rounding error propagates when multiplied by 100. It intvalwill cause the float to be cast to an integer, and such drops are always rounded to 0, so you see 1989. Use instead round.