instead of building a string this way, you can do it more efficiently by defining a `print` method. `string` automatically calls that method to make the string representation. `show` is then easy to compose from there.

`show` and `string` should typically print the full precision number. then also define `showcompact` to limit the output