Numbers and Math

Chapter 3 covered the various Numeric subclasses in Ruby, explained how to write numeric literals in Ruby, and documented Ruby’s integer and floating-point arithmetic. Here we expand on that chapter to cover numeric APIs and other math-related classes.

Numeric Methods

Numericand its subclasses define a number of useful predicates for determining the class or testing the value of a number. Some of these predicates work only for Float values, and some work only for Integervalues:

# General Predicates
0.zero?        # => true (is this number zero?)
1.0.zero?      # => false
0.0.nonzero?   # => nil (works like false)
1.nonzero?     # => 1 (works like true)
1.integer?     # => true
1.0.integer?   # => false
1.scalar?      # => true: not a complex number. Ruby 1.9.
1.0.scalar?    # => true: not a complex number. Ruby 1.9.
Complex(1,2).scalar? # => false: a complex number. require 'complex' in 1.8

# Integer predicates (Ruby 1.9 and 1.8.7)
0.even?        # => true
0.odd?         # => false

# Float predicates
ZERO, INF, NAN = 0.0, 1.0/0.0, 0.0/0.0  # Constants for testing

ZERO.finite?   # => true: is this number finite?
INF.finite?    # => false
NAN.finite?    # => false

ZERO.infinite? # => nil: is this number infinite? Positive or negative?
INF.infinite?  # => 1
-INF.infinite? # => -1
NAN.infinite?  # => nil

ZERO.nan?      # => false: is this number not-a-number?
INF.nan?       # => false
NAN.nan?       # => true

Numeric and its subclasses define various methods for rounding numbers:

# Rounding methods 1.1.ceil # => 2: ceiling: smallest integer >= ...

Get The Ruby Programming Language now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.