class Float def html_fraction self.to_s. sub(/(.+)\.0$/, '\1' ). # Zero decimal sub(/(-?\d+)\.25$/, '\1¼'). # One quarter sub(/(-?\d+)\.5$/, '\1½'). # One half sub(/(-?\d+)\.75$/, '\1¾'). # Three quarters sub(/^(-?)0(&.+)/, '\1\2' ) # Strip leading zeroes end end
And it works something like this:
>> (0.1).html_fraction => 0.1 >> (0.25).html_fraction => ¼ >> (0.50).html_fraction => ½ >> (0.75).html_fraction => ¾ >> (1.0).html_fraction => 1.0 >> (2.25).html_fraction => 2¼ >> (3.5).html_fraction => 3½ >> (4.75).html_fraction => 4¾ >> (5.85).html_fraction => 5.85 >> (-1.5).html_fraction => -1½ >> (-1.6).html_fraction => -1.6; >> (-0.25).html_fraction => -¼
Then it works also for 2.50 and negative numbers. But it might be less readable for non mathematicians...