I'm not thats a common requirement (maybe just me - i;ve never had a use case for that). I think a custom type is the right way to do it if thats your requirement though. Everything else leaves room for error or forgetfulness.
You can use some Postgres type-casting on the way in from the database with a fragment:
from p in Post,
select: fragment("?::text", p.float_thing)
But whilst terse its hackish for sure.