This was a CB-requested quicky.

Usage summary:

ft2str( $feet ); # Converts $feet to a pretty format # (rounding to the nearest 1/16"). ft2str( $feet, 4 ); # Rounds to the nearest 1/4" inch instead. ft2str( $feet, 1 ); # Rounds to the nearest inch.
use strict; sub ft2str { my $ft= shift(@_); my $denom= @_ ? shift(@_) : 16; my $numer= int( 0.5 + 12*$denom*$ft ); my $in= int($numer/$denom); $numer -= $denom*$in; $ft= int($in/12); $in -= 12*$ft; if( $numer ) { until( $numer % 2 || $denom % 2 ) { $numer /= 2; $denom /= 2; } $in .= " $numer/$denom" } return qq($in") if ! $ft; return qq($ft') if ! $in; return qq($ft' $in"); } print ft2str(12.1), "\n"; print ft2str(12.1,8), "\n"; print ft2str(0.01), "\n"; print ft2str(12.05,2), "\n"; print ft2str(12.01,2), "\n"; __END__ Produces: 12' 1 3/16" 12' 1 1/4" 0 1/8" 12' 0 1/2" 12'

Replies are listed 'Best First'.
Re: Convert feet to feet+inches+fraction
by halley (Prior) on Sep 02, 2003 at 18:58 UTC
    It's a great function, but as with any decimal-to-floating-to-fraction code, the question will be how stable all possible conversions are. On what architectures will 1/8" really be encoded into something messy like 0.1249999302"?

    --
    [ e d @ h a l l e y . c c ]

      That isn't be a problem. My code rounds and has you specify the level of accuracy you want reported. Try ft2str( 0.9/12/8, 8 ) and you'll get 0 1/8".

                      - tye