First off, I have to ask, why are you rounding? Except for display purposes, there is seldom an good reason to round IEEE-754 floats, and the operations to do it are rather complex.
I apologize if this seems a bit pedantic, I'm just trying to explain what the challenges are in what you are trying to do.
There are many numbers that cannot be exactly represented in the IEEE-754 floating point format. 36.764444 happens to be one of those. So right out of the chute, you encounter a problem. This one however doesn't have a say in the outcome, as all you are doing is looking to see is if .764444 is greater than or less than .5.
It is greater than so it seems intuitive that if you add one to 36, giving you 37, you are good do go. But in order to get there, you want to multiply and divide by 10^-2, and here is where you hit a brick wall.
0.01 is another number that cannot be represented in an IEEE float. Instead, .01 becomes .0099999998. Look at the result you actually got and its pretty obvious where this is going. I have even more bad news. Not only is .01 not exactly representable, but .1, .001, .0001, .00001, .... .000000000000000000001, etc are all numbers that cannot be exactly expressed in IEEE-754 float format. And those happen to be the very numbers expressed as 10^-n.
Now modern programs have complex algorithms that round values for display as a string of characters on your computer screen, so you see .01 on your screen, but that is a string, not a number. Inside, in memory it is .0099999998, and when you perform a computation that is what is used.
So, what to do about it?
What is the range of numbers that you will be using? Is the conceivable range of numbers, after shifting the decimal place, within the range of a DINT?
I suspect that they are - besides, long before you exceed the range of a DINT your float will start to suffer from resolution problems that render rounding to two or three decimal places moot, but that is another topic altogether. So if the answer is yes, then I suggest you multiply or divide depending on the sign of n by 10^|n| where 10^|n| is a positive integer, not a float, and make the destination address a DINT. This will automatically round. Then divide or multiply by 10^|n| again depending on the sign of n to an integer destination, then move that to your float.
In your example, start with
CPT XTAG (10**ABS(Places))
XTAG is type DINT
Use XIC Places.31 and XIO Places.32 to see if Places is negative or positive.
because bit Places.31 is set, Places is negative, so divide.
DIV 3676.4444 XTAG DINT_TAG will put 37 in DINT_TAG rounding automatically (well not actually automatically, the processor will jump through all kinds of complex gymnastics to make the conversion, but it will do it for you instead of you coding it.)
Now MUL DINT_TAG XTAG DINT_TAG will put 3700 in DINT_TAG.
Finally, MOV DINT_TAG REAL_TAG
For cases where N is positive, do the opposite, multiply first, then divide.
Over at MRPlc.com in the downloads section
http://forums.mrplc.com/index.php?autocom=downloads&showfile=761 I have posted a program written for the PLC/5 and SLC500 platforms that does tuncation and rounding by direct manipulation of the IEEE-754 float's mantissa. You can take a look at it and see what's involved behind the scenes, but even it won't work for all possible numbers.
Is places always going to be negative? If so then there are some other easy solutions.
Last of all, I have to ask again, why are you rounding? I'm just asking because we have seen other posts here where someone was attempting to round a number and it really wasn't necessary and boiled down to a misunderstanding of what the number meant and how it was really represented in the processor.