If both operands are Integer types, then your '/' yields the integer division operation, not the floating-point/decimal division you were expecting here. It doesn't matter that your lefthand assignee is a Decimal, because the division operation occurs before the assignment (division has higher biding power than assignment). Basically, in integer division, the decimal component of the result (i.e. the remainder) gets lopped off.
It works this way in C and Java too; it's not an Apex quirk (for once). While it's not bad that Apex is following the tradition of its syntactic predecessors, the intended usefulness of integer division -- processing efficiency -- serves no purpose in a high-overhead language like Apex. Nobody is going to be writing scientific computing algorithms or 3D graphics engines in Apex.
If you're using a literal in an expression, then the easy way to ensure a decimal division is to add a '.0' suffix, e.g.
Decimal foo = 1.0/2; // foo gets assigned 0.5