There have been many responses to this thread indicating the erroneous result is due to the length of either the source or destination data type.
Length is not the issue here, you cannot use COP between different data types. It is nothing to do with the size of the data, but the way the data is structured, i.e. how the bits are interpreted.
It's been said before in the thread, but I will state it again for emphasis, COP is a byte-for-byte memory location copier, and does not take into account the encoding of the data structure of either the source or destination data.
If you need to transfer the value of an INT to a FLOAT, or vice-versa, you absolutely MUST use the MOV instruction, which performs the necessary conversion between the different data-types and how they are stored in the memory locations.
Bottom line - COP was introduced as a fast way to copy data around, and is intended to be used to make copies of the same data-type.
It's not restricted in any way, and you can use COP between different data-types, with potentially erroneous results.
However it must be stated that experienced programmers can and do use COP between different data-types in a variety of ways, but it involves a much deeper understanding of the PLCs internal data storage. Only use COP for data transfers between different data-types when you fully understand the way the PLC interprets the bit patterns in the different data-type storage locations.