18*1.2 is get me 21.6
Construct 2 is smart enough to calculate constant expressions at export-time with high precision. In other words, if you type 18 * 1.2 in an expression, the game doesn't actually do a multiplication. I guess the editor does this at a higher precision than the runtime which is why it gives the correct answer.
tr((18*(10*anyval))/10) this give me 21.6
By multiplying by 10, you go from 1.2 (which requires an infinite number of binary digits) to 12 (which is an integer and can be represented in a finite number of binary digits). So you get a different answer. This is all exactly the same cause as I explained earlier, and will be reproducible in any programming language, framework, engine or computer system whatsoever, unless they deliberately use enhanced precision calculations (such as in financial software).