The statement is starting to look a little clumsy, but try this as it appears to work:
select to_char(amount/power(10,decimal),'99999999990'||substr('.',1,decimal)||rpad('0',decimal,'0'))
from mytable;
The 2nd argument of the to_char function is used to supply the format mask, which determines how many decimal places to display. In the above statement this format mask is constructed using:
'99999999990'||substr('.',1,decimal)||rpad('0',decimal,'0'))
The '99999999990' literal can be as large has you like to handle the largest number stored in your table i.e. just add extra or fewer 9's as required. The substr simply adds a decimal point when the value of decimal > 0. A decode or case could also be used, but the substr is shorter. The rpad adds the required number of decimal places to the format mask.