OK, good for you and good on Mickey for advising you well.
I was not going to be so "helpful" so quickly. But for good reasons. I wanted you to learn as you go more so than telling you what to do upfront.
This is to answer your last question as to why you might not want to use an integer as the destination here...
My initial thoughts on the rounding were to sort your Online Edit issue and then see did you realize the results of multiplying an integer by a fractional value and storing it in a integer was perhaps not as you would have expected it to be i.e. an unexpectedly "rounded result". Had you returned to say as such I would then have realized that you have a basic misconception as to how such arithmetic instructions execute and how such data types store their values. I would then have gone on to explain the basics.
As Mickey "pulled the trigger" early on that one you have now jumped to the end of the "lesson" with a possibly more pleasing "unrounded result", but still asking "what was I doing wrong?"
But that's OK...
You are allowed to use an integer destination here, and using the float as a constant would have worked, as my examples have shown. But it results in rounding in the destination integer because the integer data type can only store whole numbers and not fractional parts i.e "1", but not "1.5". So the instruction performs the necessary rounding to produce the resultant whole number value that must be stored in the integer destination...
Example:
Source A N7:2 = 54
Source B
F8:7 = 0.7
Dest N7:7 = 38 <<< rounded result
But you must use a float as the constant in between two integers or else it will error! The operands do not match (Source B and Dest).
If you were expecting the destination integer to store a real, or float value i.e. a whole number plus fractional part (1.5), then it will not and the resultant rounded value may not be too your liking. Whether this rounding is important to your goal here or not, only you can decide, unless you explain a little more what you had hoped to achieve here, then we could advise you as such. I had also considered that you do know what you're doing here and had intentionally chosen an integer destination while multiplying with a fractional value.
So as it stands, you have an integer whole number being multiplied by a fractional constant, and the result now being stored in a float destination. This will yield an "unrounded result", as I'm sure you are now aware...
Example:
Source A N7:2 = 54
Source B
0.7
Dest F8:7 = 37.8 <<<unrounded result
You can use a constant here because the operands match (Source B and Dest)
Both methods are valid and both have their uses. If you require accuracy in the result, then use a float destination (example: process control). If you require less accuracy and a rounded whole number result is OK, then use an integer destination (example: display a rough value), but don't forget to use a float for the constant if its fractional.
As for this anomaly with using a fractional constant in between two integer data types in a MUL instruction; it appears as though it's been around a while and it's here to stay, as they don't seem to have corrected it since 2008...
51613 - RSLogix 500 error: operand sizes do not match
Access Level: Everyone
That "rounds" my evening off nicely and I can head home now as its the start of my "technology downtime" for the weekend.
Have a good one.
Regards,
George