fork download
  1. set numbers [list 625000.0 520.0 -1110.0 42.0]
  2.  
  3. proc fix_sci {n} {
  4. if {![string match "*e-*" $n]} {return $n} ;# Not a sci-fmt number
  5.  
  6. set a 9
  7. set b 12
  8.  
  9. regexp -- {(-?[0-9.]+)e-0*([0-9]+)} $n - front exp
  10.  
  11. if {$exp <= $a} {
  12. set dif [expr {$exp-$a}]
  13. set front [expr {$front/(10.0**$dif)}]
  14. set exp $a
  15. } else {
  16. set dif [expr {$exp-$b}]
  17. set front [expr {$front/(10.0**$dif)}]
  18. set exp $b
  19. }
  20.  
  21. return [format %3ge-%.2d $front $exp]
  22. }
  23.  
  24. puts [format "%15s%15s" "Not formatted" "Formatted"]
  25. puts "---------------+--------------"
  26.  
  27. foreach n $numbers {
  28. set fmt [fix_sci [format %3.6g [expr {$n * 1e-12}]]]
  29. set nfmt [format %3.6g [expr {$n * 1e-12}]]
  30. puts [format "%15s%15s" $nfmt $fmt]
  31. }
Success #stdin #stdout 0.02s 5228KB
stdin
Standard input is empty
stdout
  Not formatted      Formatted
---------------+--------------
       6.25e-07        625e-09
        5.2e-10        520e-12
      -1.11e-09      -1.11e-09
        4.2e-11         42e-12