Engineering formatting with SI prefixes using Formatting.jl

I am trying to use pretty formatting engineering with Formatting.jl but I fail. Is it possible to automatically format numbers with SI prefixes and, ideally, be able to select precision?

E.g.:

0.01 → 10m
0.022 → 22m
0.0222 → 22.2m
0.00001 → 10μ

With Formatting.jl and autoscaling I get:

format(0.00001, autoscale = :metric) → 0.01m

Ideally I would prefer this format: [1–1000){SI prefix}{maybe unit}

1 Like

Not tested enough, but seems to work with your examples:

using Formatting

function formatSI(x)
  1e-3<abs(x)<1      ? format(1e3*x,  autoscale=:metric) * "m" :
  1e-6<abs(x)<1e-3   ? format(1e6*x,  autoscale=:metric) * "μ" :
  1e-9<abs(x)<1e-6   ? format(1e9*x,  autoscale=:metric) * "n" :
  1e-12<abs(x)<1e-9  ? format(1e12*x, autoscale=:metric) * "p" :
  return format(x, autoscale=:metric)
end

Thanks. I was also thinking of doing something similar but I was hoping there would be a magic switch somewhere in Formatting.jl