0.0
No commit activity in last 3 years
No release in over 3 years
Tiny ruby library for dealing with fractions.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 2.0
>= 0
>= 0
~> 3.0

Runtime

 Project Readme

NumberMuncher

Build Status Gem Version

Parses strings into numbers, including integers, decimals, and fractions (including unicode fraction glyphs like ).


A Number Muncher

Usage

Formats

NumberMuncher accepts the following formats (with an optional leading -):

  • Integers (with or without separators): 1, -1, 5,394, 9592, etc.
  • Decimals (with or without separators): 3.5, -7.4, 9,104.94, etc.
  • Fractions: 3/5, -19/20, ¾, etc. (see unicode.rb for a full list of supported Unicode fraction glyphs).
  • Mixed fractions (with or without separators): 3 3/4, 1-1/3, -1⅔, 1,234 ⅚, etc.

Other inputs, including invalid fractions (eg. 1/0), are considered invalid and will raise NumberMuncher::InvalidNumber.

Parsing

Parsing a numeric string for a single Rational (which can then have to_i, to_f, etc. called on it as per your needs):

NumberMuncher.parse('4 1/2') #=> 9/2r

# or equivalent:
NumberMuncher::Numeric.new('4 1/2') 

If the input string contains multiple numbers (other than mixed fractions), NumberMuncher::InvalidParseExpression will be raised.

Scanning

Returns all the numbers in a string, as Rationals.

NumberMuncher.scan('Cook at 375° for 10 minutes, flip and cook for another 5.5 minutes')
# => [375r, 10r, 11/2r]

Formatting

Returns a fraction string for a given numeric value.

NumberMuncher.to_fraction(1/4r) #=> "¼"
NumberMuncher.to_fraction(9.625) #=> "9⅝"

# Without using unicode glyphs:
NumberMuncher.to_fraction(1/4r, unicode: false) #=> "1/4"
NumberMuncher.to_fraction(9.625, unicode: false) #=> "9 5/8"

# Rounding:
NumberMuncher.to_fraction(3/7r, round_to: 1/4r) #=> "½"

# Rationalizing (adjust the fraction precision, default = 0.001):
NumberMuncher.to_fraction(Math::PI) #=> "3 9/64"
NumberMuncher.to_fraction(Math::PI, factor: 0.1) #=> "3⅕"
NumberMuncher.to_fraction(Math::PI, factor: 0.0000000000000001) #=> "3 39854788871587/281474976710656"  

to_fraction can also be called as an instance method. Note that this method does not take a round_to argument, but you can chain round before calling to_fraction:

NumberMuncher.parse('3.456').to_fraction #=> "3 21/46" 
NumberMuncher.parse('3.456').round(0.1).to_fraction #=> "3½"
NumberMuncher.parse('3.456').round(0.1).to_fraction(unicode: false) #=> "3 1/2"

Installation

NumberMuncher requires ruby >= 2.4.4.

Add this line to your application's Gemfile:

gem 'number_muncher'

And then execute:

$ bundle

Or install it yourself as:

$ gem install number_muncher

Configuration

Separators for thousands and decimals can be configured. Default values are shown below:

NumberMuncher.thousands_separator = ','
NumberMuncher.decimal_separator = '.'

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/dvandersluis/number_muncher.