: normalize-float ( x -- exp base ) 0 swap [ dup [ 10.0 >= ] [ 1.0 < ] bi or ] [ dup 10.0 >= [ 10.0 / [ 1+ ] dip ] [ 10.0 * [ 1- ] dip ] if ] [ ] while ; : >exponential ( n -- base exp ) [ abs normalize-float [ [ 0 < "-" "+" ? ] [ number>string 2 CHAR: 0 pad-left ] bi "e" -rot 3append ] [ number>string ] bi* ] keep 0 < [ "-" prepend ] when swap ;