@LindsayC the reason is that the P parameter of M569 expects a driver ID, which looks like a float but is different. To make it easier to generate the P parameter in a macro, in recent versions of RRF we allow a float with a fractional part that is very close to a multiple of 0.1 to be converted to a driver ID. We can't say that it has to be exactly a multiple of 0.1 because 0.1 cannot be represented exactly as a binary float.
Expressions of any type can be converted to string.