Skip to content

readysteady/percentage

main
Switch branches/tags
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
lib
 
 
 
 
 
 
 
 
 
 
 
 
 
 

percentage

Gem Version Test Status

Ruby gem for working with percentages.

Install

Using Bundler:

$ bundle add percentage

Using RubyGems:

$ gem install percentage

Constructing Percentages

The Percentage method converts numeric objects to percentage objects with values that you would expect:

Percentage(50)  # => 50%

Percentage(BigDecimal('17.5'))  # => 17.5%

Percentage(Rational(25, 2))  # => 12.5%

Percentage objects can also be constructed directly, but in this case BigDecimal/Rational values are treated as fractions:

Percentage.new(50)  # => 50%

Percentage.new(BigDecimal('0.175'))  # => 17.5%

Percentage.new(Rational(1, 8))  # => 12.5%

Some shortcut methods are defined on Integer and BigDecimal for convenience:

50.percent  # => 50%

5.as_percentage_of(10)  # => 50.0%

BigDecimal('2.9').to_percentage  # => 2.9%

Numeric features

As with other numerics, percentage objects are conceptually immutable. Common numeric functionality like to_i, to_f, to_s, to_r, zero?, and equality/comparison methods are defined.

Percentages can be added together:

Percentage(10) + Percentage(20)  # => 30%

They can also be "scaled up" using the scale method:

Percentage(10).scale(5)  # => 50%

Multiplication is defined using the fractional value of the percentage. BigDecimal objects can't be coerced into rational objects, so the multiplication order will matter in some cases, for example:

Percentage(50) * 10  # => (5/1)

Percentage(50) * Percentage(10)  # => 5.0%

BigDecimal('150.00') * Percentage(50)  # => BigDecimal('75.00')

Percentage(50) * BigDecimal('150.00')  # raises TypeError

Bonus extras

There's a #percent_of method defined on Integer and BigDecimal for percentage calculations:

50.percent_of(BigDecimal(150))  # => BigDecimal('75.00')

10.percent_of(100)  # => (10/1)

BigDecimal('0.5').percent_of(88)  # => BigDecimal('0.44')

There's also a Percentage.change method for calculating the percentage change between two values:

Percentage.change(2, 3)  # => 50.0%

About

Ruby gem for working with percentages

Topics

Resources

License

Stars

Watchers

Forks

Languages