You could try this, assuming your original field is a string, not a number:
left({zipcode},5)+"-"+right({zipcode},4)
If your original field is a number, then try the following to avoid trimming leading zeros, i.e., so you don't lose the leading zero in a zip like 02453-5422:
left(if len(totext({zipcode},0,""

) < 9 then replace(space(9-len(totext({zipcode},0,""

))," ","0"

+totext({zipcode},0,""

,5)+"-"+right(if len(totext({zipcode},0,""

) < 9 then replace(space(9-len(totext({zipcode},0,""

))," ","0"

+totext({zipcode},0,""

,4)
There might be a simpler way, but this worked when I tried it.
-LB