NumericIO provides fine control over numeric output: Scientific/Engineering/SI-notation +UTF8:

- Includes facilities to display values using SI prefixes (
`Y`

,`Z`

,`E`

,`P`

,`T`

,`G`

,`M`

,`k`

,`m`

,`μ`

,`n`

,`p`

,`f`

,`a`

,`z`

,`y`

) - Makes it easy to control the number of significant digits to output - as opposed to number of decimal places (similar, but not the same).
- Link: https://github.com/ma-laforge/NumericIO.jl

### Basic Usage

Create a convenience formatting function:

```
using NumericIO
SI(x) = formatted(x, :SI, ndigits=4)
```

Then use said function:

```
SI(3.14159e-9) # => "3.142n"
SI(2.71828e12) # => "2.718T"
```

For a more traditional scientific output, use the following:

```
formatted(3.14159e-8, :SCI, ndigits=3) # => "3.14×10⁻⁸"
```

Or instead restrict the output to engineering notation (limiting to powers divisible by 3):

```
formatted(3.14159e-8, :ENG, ndigits=3) # => "31.4×10⁻⁹"
```

**NOTE:*** I personally find numeric output easier to read in engineering notation as opposed to scientific notation.

### More Advanced Usage

Fix the output to a certain floating point position:

```
fmt = NumericIO.IOFormattingReal(:SI, NumericIO.Charset{:UTF8}, ndigits=4, decpos=-12, decfloating=false)
SI(x) = formatted(x, fmt)
#Sample output:
SI(3.14159e-11) # => "31.42p"
SI(2.71828e-7) # => "271800p"
```

For more examples of advanced usage, consult the README.md page: https://github.com/ma-laforge/NumericIO.jl.

Note that the low level functions operate on `IO`

streams, and make use of Julia’s built-in GRISU algorithms.