As Perl is based on c, let's look at how c handles this. In c, you can do:
float x = 147.2;
printf("%20.20f", x * 100);
it gives you 14719.99969482421875000000, which is fine, unless you are working on some finance application (COBOL will not have this problem, as its decimal is fixed; In Java you will have same thing as c, as Java is also c based, just like Perl, but Java has a class called BigDecimal, which holds fixed decimal.)
However, when you try
float x = 147.2;
printf("%d", x * 100);
It produces -167772160, which is garbage, but it is not a c problem, it is the programmer's problem, as c is trying to interprete that piece of memory as integer, as the programmer required.
To resolve this problem, when they develop Perl, they did this:
float x = 147.2;
printf("%d", (int)(x * 100));
which prints out 14719.
So a new problem is introduced. However this would be fine to most people, most of the time. If you really care the accuracy and precision, because of the nature of your application, then try Math::BigFloat.