The problem isn't in ActiveState's product or Microsoft's (but feel free to blame Microsoft anyway; I use them as a general blame sink). The problem is that floating point values do not represent exact decimal numbers. If you want exact decimal numbers, use integers to represent them and then shift the decimal point to the correct position.
You'll find most database products offer to do this for you. Unfortunately when copying the stored value from the database to Perl, it gets stored as a floating point value again. To preserve accuracy you need to keep the value as an integer until it presentation.