Your approach seems to be the best option. The default data type for each column from the flat file is string. So, your [Sign] + [Price]
expression is doing string concatenation. And, the data is implicitly converted to a decimal value when moved to your output column.
One change that would improve readability is to explicitly cast the string value to a decimal. You can change your expression in the Derived Column component to this:
(DT_DECIMAL, scale)[Sign] + [Price]
where scale
is a number that will match the data type for your output column.
With this change, the output from your Derived Column component will be the decimal data type.