use strict; use warnings; while () { chomp; my $a = $_; $a =~ s/^\d?\.0*?//; # strip 0.0 part from 0.035 my $b = length($_) - 2; # how many zero's we need # assume in 0.0x form my $c = 10 ** $b; my $gcd = gcd($a, $c); $a /= $gcd; $c /= $gcd; print $_, "\t", "$a/$c", "\n"; } # ---- borrowed from tilly's code ---- sub gcd { my ($n, $m) = @_; while ($m) { my $k = $n % $m; ($n, $m) = ($m, $k); } return $n; } __DATA__ 0.035 0.037 0.039 0.041 0.043 0.046 0.048 0.058 0.068 0.078 0.35 0.37 0.39 0.41 0.43 0.46 0.48 0.58 0.68 0.78 #### 0.035 7/200 0.037 37/1000 0.039 39/1000 0.041 41/1000 0.043 43/1000 0.046 23/500 0.048 6/125 0.058 29/500 0.068 17/250 0.078 39/500 0.35 7/20 0.37 37/100 0.39 39/100 0.41 41/100 0.43 43/100 0.46 23/50 0.48 12/25 0.58 29/50 0.68 17/25 0.78 39/50