I suspect that
CAST
ing as
Decimal
without specifying Precision and Scale results in a Scale of zero which means no decimal places.
These all yield 42 as the result.
SELECT CAST('0.042' AS decimal(18,3))*1000
SELECT CAST(0.042 AS decimal(18,3))*1000
SELECT CAST('0.042' AS numeric(18,3))*1000
SELECT CAST(0.042 AS numeric(18,3))*1000
SELECT CAST('0.042' AS real)*1000
SELECT CAST(0.042 AS real)*1000
SELECT CAST('0.042' AS float(24))*1000
SELECT CAST(0.042 AS float(24))*1000