We already have the law
read . show = id
which implies the injectivity and surjectivity conditions you specify.
I think this doesn't hold for the standard Read/Show instances for Double/Float: IEEE-754 NaNs have a sign bit and a payload, and both parts are probably lost by the "read . show"-combination. The 2 infinities are probably OK, but what about -0 vs. +0?