## With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

No credit card required

# 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

`Numeric`and 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 `Integer`values:

```# 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 >= ...`

## With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

No credit card required