DZone Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world

Snippets has posted 5883 posts at DZone. View Full User Profile

Float To HTML Fraction Entity

07.24.2006
| 5366 views |
  • submit to reddit
        Uses HTML entities to display pretty fractional values for applicable floating point numbers.

class Float
  def to_html_fraction
    fraction = case self.abs % 1.0
    when 1.0 / 2 then '½'  # One half
      
    when 1.0 / 4 then '¼'  # One quarter
    when 3.0 / 4 then '¾'  # Three quarters
    
    when 1.0 / 3 then '⅓'  # One third
    when 2.0 / 3 then '⅔'  # Two thirds
      
    when 1.0 / 5 then '⅕'  # One fifth
    when 2.0 / 5 then '⅖'  # Two fifths
    when 3.0 / 5 then '⅗'  # Three fifths
    when 4.0 / 5 then '⅘'  # Four fifths

    when 1.0 / 6 then '⅙'  # One sixth
    when 5.0 / 6 then '⅚'  # Five sixths

    when 1.0 / 8 then '⅛'  # One eighth
    when 3.0 / 8 then '⅜'  # Three eighths
    when 5.0 / 8 then '⅝'  # Five eighths
    when 7.0 / 8 then '⅞'  # Seven eighths
    end
    if fraction
      body = case self.floor
      when -1 then '-'
      when  0 then ''
      else self.to_i.to_s
      end
      body + fraction
    else
      self.to_s
    end
  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
=> -¼
    

Comments

Snippets Manager replied on Mon, 2012/05/07 - 1:25pm

Yeah, I'm definately no mathematician. That's one of the reasons I switched from a mathematical approach to a regular expressions based method. It also was only 1 line. I just love solving things in only 1 line. This is for a personal project, a comic book database. I've been reimplementing it for years in Access, ASP, JSP, PHP, ColdFusion and now Ruby On Rails. (I think of it as my own little personal Pet Store application.) I have issues numbered with negative numbers and issues with fractions, but no issues with negative fractions. Since you brought it up now, I figure it's just a matter of time, though. Thanks for the addition.

Snippets Manager replied on Thu, 2006/08/03 - 7:35pm

Using the modulo operator (%) you can do it like this: class Float def html_fraction fraction = case self.abs%1.0 when 0.25 : '¼' when 0.5 : '½' when 0.75 : '¾' end if fraction body = case self.floor when -1 : '-' when 0 : '' else self.to_i.to_s end body + fraction else self.to_s end end end Then it works also for 2.50 and negative numbers. But it might be less readable for non mathematicians...