Quick index
Numeric
Numeric
is the parent class for all numeric classes existing in ruby and it inherits directly from the Object class.
As you might know, when we create an object, it is stored in the Heap designated memory space. It is the Numeric class that allows the allocation of a physical address in the heap for that numerical instance.
Each other child class is a single immutable object passed by value. There can only ever be one instance of a number.
a = 1
a.object_id == 1.object_id #=> true
In Ruby, negative numbers can be represented by placing a minus sign in front of it. Just like in 404
.
An underscore can be placed to separate the thousands if you wish. As it is in 1_234.56
. At the end of the day, that underscore will be ignored by the compiler.
Integer
Integers are whole numbers, used when we don't care about precision.
Parent class for Fixnum
and Bignum
in the past. Nowadays, Fixnum and Bignum are considered deprecated, but under the hood they function the same way.
Fixnum
represents all whole numbers that fits into 32 or 64 bits.
Bignum
represents whole numbers that are outside that range.
1.class #=> Fixnum
100000000000.class #=> Bignum
Float
Float point numbers are the ones with decimal places. Although they are often used to have a more exact result, they are quite imprecise because of rounding errors. So you could see something like this:
(2.01.1) == 0.9 #=> false
This is not a Ruby particularity, it is like that because of the way floats are stored, and it would only be a concern if you need a very precise results.
2.01.1 #=> 0.8999999999999999
BigDecimal
That is the one to go if you need that extreme precise result.
The down side: it is 12x slower than a float and that is the reason float is the default.
Complex
This type is used when pairing real number with an imaginary number.
2+1i #=> (2+1i)
Complex(1) #=> (1+0i)
Complex(2, 3) #=> (2+3i)
3.to_c #=> (3+0i)
Rational
They are used for fractions. They have the numerator and denominator. To represent one, we just need to add r
to the fraction:
1/4r + 2/4r #=> 3/4
Important notes
Calculations with two integers, will always result in an integer.
5/2 #=> 2
To get a more precise result, use one of the operands as a float.
5/2.0 #=> 2.5

There is a bunch of methods available for Numerics in general, for Integers, Floats, BigDecimals, Complexes, and Rationals as well.
Summary from wikibooks.org
numbers  Its type 

123  Fixnum 
123  Fixnum (signed) 
1_123  Fixnum (underscore is ignored) 
543  Negative Fixnum 
123_456_789_123_456_789  Bignum 
123.45  Float 
1.2e3  Float 
123.45r  Rational, introduced in ruby 2.1 
0xaabb  (Hexadecimal) Fixnum 
0377  (Octal) Fixnum 
0b1010  (Binary [negated]) Fixnum 
0b001_001  (Binary) Fixnum 
?a  ASCII character code for 'a'(97) 
Top comments (0)