The "Quirk" is because ODBC/JDBC applications are free to ignore the formating phrase, and they do just that and display data using their own formats.
When you cast to CHAR(n), the formating is applied at the TD server end, and the resulting "string" is send to the client. which is why it works when you cast to char(n) in Queryman.
On the other hand CLI based applications like Bteq, retains the format while displaying so you don't have to do gimmicks.
And as usual too many casting and formating comes with extra CPU cycles.