Interesting thread.
Combining my favorite parts from all replies I think I would now do something like this:
DECLARE @Number Decimal(10,2)
SET @Number = 12345678.90
DECLARE @Number_String VarChar(25)
SET @Number_String = Convert(VarChar(25), @Number)
;WITH
T1 AS (SELECT 1 X UNION ALL SELECT 1 X),
Sequence AS (SELECT Row_Number() OVER (ORDER BY A.X) AS Number FROM T1 A, T1 B, T1 C, T1 D)
SELECT
(
SELECT
SUBSTRING(@Number_String, Sequence.Number, 1)
FROM
Sequence
WHERE
Sequence.Number <= LEN(@Number_String)
ORDER BY
Sequence.Number DESC
FOR XML PATH(''), TYPE
)
.value('.', 'VARCHAR(25)');