I was using the following function:
%NumberAsText[%Player%.Location.s_FloorNum-%number%]%
But if %number% is negative then it gives a "bad expression" ADRIFT error:
%Player%.Location.s_FloorNum--%number%
Putting brackets around %number%:
%NumberAsText[%Player%.Location.s_FloorNum-(%number%)]%
did not work either.
Expressions themselves can handle this ok, the problem is with Item Functions. It was reading - as a continuation of the function name, and failing to parse. Fixed.