set numbers [list 625000.0 520.0 -1110.0 42.0]
proc fix_sci {n} {
if {![string match "*e-*" $n]} {return $n} ;# Not a sci-fmt number
set a 9
set b 12
regexp -- {(-?[0-9.]+)e-0*([0-9]+)} $n - front exp
if {$exp <= $a} {
set dif [expr {$exp-$a}]
set front [expr {$front/(10.0**$dif)}]
set exp $a
} else {
set dif [expr {$exp-$b}]
set front [expr {$front/(10.0**$dif)}]
set exp $b
}
return [format %3ge-%.2d $front $exp]
}
puts [format "%15s%15s" "Not formatted" "Formatted"]
puts "---------------+--------------"
foreach n $numbers {
set fmt [fix_sci [format %3.6g [expr {$n * 1e-12}]]]
set nfmt [format %3.6g [expr {$n * 1e-12}]]
puts [format "%15s%15s" $nfmt $fmt]
}
c2V0IG51bWJlcnMgW2xpc3QgNjI1MDAwLjAgNTIwLjAgLTExMTAuMCA0Mi4wXQoKcHJvYyBmaXhfc2NpIHtufSB7CiAgaWYgeyFbc3RyaW5nIG1hdGNoICIqZS0qIiAkbl19IHtyZXR1cm4gJG59IDsjIE5vdCBhIHNjaS1mbXQgbnVtYmVyCiAgCiAgc2V0IGEgOQogIHNldCBiIDEyCiAgCiAgcmVnZXhwIC0tIHsoLT9bMC05Ll0rKWUtMCooWzAtOV0rKX0gJG4gLSBmcm9udCBleHAKICAKICBpZiB7JGV4cCA8PSAkYX0gewogICAgc2V0IGRpZiBbZXhwciB7JGV4cC0kYX1dCiAgICBzZXQgZnJvbnQgW2V4cHIgeyRmcm9udC8oMTAuMCoqJGRpZil9XQogICAgc2V0IGV4cCAkYQogIH0gZWxzZSB7CiAgICBzZXQgZGlmIFtleHByIHskZXhwLSRifV0KICAgIHNldCBmcm9udCBbZXhwciB7JGZyb250LygxMC4wKiokZGlmKX1dCiAgICBzZXQgZXhwICRiCiAgfQogIAogIHJldHVybiBbZm9ybWF0ICUzZ2UtJS4yZCAkZnJvbnQgJGV4cF0gIAp9CgpwdXRzIFtmb3JtYXQgIiUxNXMlMTVzIiAiTm90IGZvcm1hdHRlZCIgIkZvcm1hdHRlZCJdCnB1dHMgIi0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSIKCmZvcmVhY2ggbiAkbnVtYmVycyB7CiAgc2V0IGZtdCBbZml4X3NjaSBbZm9ybWF0ICUzLjZnIFtleHByIHskbiAqIDFlLTEyfV1dXQogIHNldCBuZm10IFtmb3JtYXQgJTMuNmcgW2V4cHIgeyRuICogMWUtMTJ9XV0KICBwdXRzIFtmb3JtYXQgIiUxNXMlMTVzIiAkbmZtdCAkZm10XQp9