Thank you Jeff,
Your suggestion gave me an idea. It was actually a precision problem. I just changed to a larger precision and it was fixed. 🙂
Code turned out like this.
SUBSTRING([Column 2],12,1) == "p" ? (DT_NUMERIC,16,3)SUBSTRING([Column 2],1,11) * @[User::Negative] : (DT_NUMERIC,16,3)SUBSTRING([Column 2],1,12) * @[User::Positive]