What I didn’t know about Ruby Numbers

Krivec Ales — Pexels.com

The Numeric Class

Fixnum and Bignum

# Before Ruby 2.4
>> 3.class
=> Fixnum
>> 30000000000000.class
=> Bignum
# After Ruby 2.4
>> 3.class
=> Integer
>> 30000000000000.class
=> Integer

Use underscores to improve your readability

>> 1_000 + 1
=> 1001
1_350_800 - 1_000_000
=> 350800

Divmod vs Modulo operators

>> 13.divmod(3)
=> [4, 1]
# The quotient 4 means that we get 4 times 3 in 13 (4 * 3 = 12) and it rests 1 (12 + 1 = 13).
>> 13%3
=> 1
>> 13.modulo(3)
=> 1
# it is equivalent to 13.divmod(3)[1]

Floats are not exact …

>> 4.0 - 3.1 == 0.9
=> false
>> 4.0 - 3.1
=> 0.8999999999999999

… but BigDecimals are

>> require 'bigdecimal'
=> true
>> BigDecimal('4.0') - BigDecimal('3.1') == 0.9
=> true

Rationals

>> (2/3).class
=> Integer
>> (2/3r).class
=> Rational
>> 1.5.to_r
=> (3/2)
>> (1/8r) + (7/8r)
=> (1/1)

The last word

Other stories I’ve written ✍️

--

--

--

Fullstack developer in love with Rails, React and Next.js Maker of stanza.dev

Love podcasts or audiobooks? Learn on the go with our new app.

Recommended from Medium

Join the LightSide

EGL — English Game Learning

Energy System for Sprinting

Linq Behind the Scenes

Technology Basics for PM: Part 3 — Version Control

How I passed the Professional AWS DevOps Certification amid the Coronavirus Lockdown

Can I train scikit-learn model 100x faster using sk-dist?

CS 371g Summer 2020: Steve Han

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Olivier Dumas

Olivier Dumas

Fullstack developer in love with Rails, React and Next.js Maker of stanza.dev

More from Medium

All the Code I Didn’t Write

Picking a Random Element from an array in Ruby

How to solve “undefined method `documentations’ for RspecApiDocumentation:Module”

ruby-build: definition not found: x.x.x