A simple way to covert any arbitrary number to engineering notation [http://en.wikipedia.org/wiki/Engineering_notation] # eng - return engineering notation of any given number in a 3 element list as {num eng unit} # pico nano micro milli 1 kilo Mega Giga Tera # use: eng eg. eng 123.456E6 Hz # First - scan to check if n is a number, if not then just return with input given {n u} proc eng {n u} { if ![scan $n %g res] {return [list $n {} $u]} if [expr $n>=1E-12 && $n<1E-9] {list [expr $n*1E12] p$u} \ elseif [expr $n>=1E-9 && $n<1E-6] {list [expr $n*1E9] n$u} \ elseif [expr $n>=1E-6 && $n<1E-3] {list [expr $n*1E6] u$u} \ elseif [expr $n>=1E-3 && $n<1] {list [expr $n*1E3] m$u} \ elseif [expr $n>=1 && $n<1E3] {list [format %g $n] $u} \ elseif [expr $n>=1E3 && $n<1E6] {list [expr $n/1E3] k$u} \ elseif [expr $n>=1E6 && $n<1E9] {list [expr $n/1E6] M$u} \ elseif [expr $n>=1E9 && $n<1E12] {list [expr $n/1E9] G$u} \ elseif [expr $n>=1E12 && $n<1E15] {list [expr $n/1E12] T$u} \ else {list [format %g $n] $u} }