the result of an expr
is internally represented as a float. When you turn it back to a string in an implicit way, you get a lossless* string conversion, which is most readable in scientific notation, so that's what's used. If you don't want that, don't let tcl do the conversion, but be wary that you give up the exact string representation:
% puts [expr {1. / 8 / 1000000}]
1.25e-7
% puts [format "%f" [expr {1. / 8 / 1000000}]]
0.000000
% puts [format "%.20f" [expr {1. / 8 / 1000000}]]
0.00000012500000000000
*lossless only as of Tcl8.5