#!/usr/bin/perl # By: Ben Okopnik , 07:45 2012-07-16 # Finds nearest "tape measure" fraction for a given decimal use warnings; use strict; die "Usage: ", $0 =~ /([^\/]+)$/, " [tolerance]\n" unless @ARGV && $ARGV[0] =~ /^(\d+)?(\.\d+)$/; # Yep, positives only :) my $int = $1 || 0; my $dec = $2; die "No mantissa\n" unless $dec > 0; die "Not a reasonable tolerance\n" if $ARGV[1] && $ARGV[1] !~ /^0?\.\d+$/; my $tolerance = $ARGV[1] || .001; # 1 mil is the default my $denom = 2; { for my $num (1 .. $denom - 1){ die $int + $dec, " is equal to $int $num/$denom (+/-$tolerance)\n" if abs($dec - $num / $denom) <= $tolerance; } $denom *= 2; redo; }