#### 6.2.6 Numerical input and output

— procedure: number->string z
— procedure: number->string z radix

> Radix must be an exact integer, either 2, 8, 10, or 16. If omitted, radix defaults to 10. The procedure ‘`number->string`’ takes a number and a radix and returns as a string an external representation of the given number in the given radix such that

>     (let ((number number)
>                (radix radix))
>            (eqv? number
>                  (string->number (number->string number
>                                                  radix)
>                                  radix)))

> is true. It is an error if no possible result makes this expression true.

> If z is inexact, the radix is 10, and the above expression can be satisfied by a result that contains a decimal point, then the result contains a decimal point and is expressed using the minimum number of digits (exclusive of exponent and trailing zeroes) needed to make the above expression true [howtoprint], [howtoread]; otherwise the format of the result is unspecified.

> The result returned by ‘`number->string`’ never contains an explicit radix prefix.

> > Note: The error case can occur only when z is not a complex number or is a complex number with a non-rational real or imaginary part.

> > Rationale: If z is an inexact number represented using flonums, and the radix is 10, then the above expression is normally satisfied by a result containing a decimal point. The unspecified case allows for infinities, NaNs, and non-flonum representations.

— procedure: string->number string
— procedure: string->number string radix

> Returns a number of the maximally precise representation expressed by the given string. Radix must be an exact integer, either 2, 8, 10, or 16. If supplied, radix is a default radix that may be overridden by an explicit radix prefix in string (e.g. `"#o177"`). If radix is not supplied, then the default radix is 10. If string is not a syntactically valid notation for a number, then ‘`string->number`’ returns `#f`.

>     (string->number "100")                 ==>  100
>          (string->number "100" 16)              ==>  256
>          (string->number "1e2")                 ==>  100.0
>          (string->number "15##")                ==>  1500.0

> > Note: The domain of ‘`string->number`’ may be restricted by implementations in the following ways. ‘`String->number`’ is permitted to return `#f` whenever string contains an explicit radix prefix. If all numbers supported by an implementation are real, then ‘`string->number`’ is permitted to return `#f` whenever string uses the polar or rectangular notations for complex numbers. If all numbers are integers, then ‘`string->number`’ may return `#f` whenever the fractional notation is used. If all numbers are exact, then ‘`string->number`’ may return `#f` whenever an exponent marker or explicit exactness prefix is used, or if a `#` appears in place of a digit. If all inexact numbers are integers, then ‘`string->number`’ may return `#f` whenever a decimal point is used.