# Programming Ruby ### The Pragmatic Programmer's Guide
Previous < | Contents ^ | Next >

class Numeric |
Parent: | Object
Version: | 1.6

### Index:

+@ --@ abs coerce divmod eql? integer? modulo nonzero? remainder zero?

Subclasses: Float, Integer

Numeric is the fundamental base type for the concrete number classes `Float`, `Fixnum`, and `Bignum`.

mixins
Comparable: | <, <=, ==, >=, >, between?

Difference between modulo and remainder. The modulo operator (``%'') always has the sign of the divisor, whereas `remainder` has the sign of the dividend.
a | b | a.divmod(b) | a / b | a.modulo(b) | a.remainder(b)
13 | 4 | 3, | 1 | 3 | 1 | 1
13 | -4 | -4, | -3 | -4 | -3 | 1
-13 | 4 | -4, | 3 | -4 | 3 | -1
-13 | -4 | 3, | -1 | 3 | -1 | -1
11.5 | 4 | 2.0, | 3.5 | 2.875 | 3.5 | 3.5
11.5 | -4 | -3.0, | -0.5 | -2.875 | -0.5 | 3.5
-11.5 | 4 | -3.0, | 0.5 | -2.875 | 0.5 | -3.5
-11.5 | -4 | 2.0, | -3.5 | 2.875 | -3.5 | -3.5

instance methods
+@ | +num -> num
|  | Unary Plus---Returns the receiver's value.
--@ | --num -> aNumeric
|  | Unary Minus---Returns the receiver's value, negated.
abs | num.abs -> aNumeric
|  | Returns the absolute value of num.
`12.abs` | » | `12`
`(-34.56).abs` | » | `34.56`
`-34.56.abs` | » | `34.56`
coerce | num.coerce( aNumeric ) -> anArray
|  | If aNumeric is the same type as num, returns an array containing aNumeric and num. Otherwise, returns an array with both aNumeric and num represented as `Float` objects.
`1.coerce(2.5)` | » | `[2.5, 1.0]`
`1.2.coerce(3)` | » | `[3.0, 1.2]`
`1.coerce(2)` | » | `[2, 1]`
divmod | num.divmod( aNumeric ) -> anArray
|  | Returns an array containing the quotient and modulus obtained by dividing num by aNumeric. If `q, r = x.divmod(y)`,
q | = | floor(float(x) / float(y))
x | = | q * y + r
The quotient is rounded toward -infinity. See Table 22.6 on page 350.
`11.divmod(3)` | » | `[3, 2]`
`11.divmod(-3)` | » | `[-4, -1]`
`11.divmod(3.5)` | » | `[3.0, 0.5]`
`(-11).divmod(3.5)` | » | `[-4.0, 3.0]`
`(11.5).divmod(3.5)` | » | `[3.0, 1.0]`
eql? | num.eql?( aNumeric ) -> `true` or `false`
|  | Returns `true` if num and aNumeric are the same type and have equal values.
`1 == 1.0` | » | `true`
`1.eql?(1.0)` | » | `false`
`(1.0).eql?(1.0)` | » | `true`
integer? | num.integer? -> `true` or `false`
|  | Returns `true` if num is an `Integer` (including `Fixnum` and `Bignum`).
modulo | num.modulo( aNumeric ) -> aNumeric
|  | Equivalent to num.`divmod(` aNumeric `)[1]`.
nonzero? | num.nonzero? -> num or `nil`
|  | Returns num if num is not zero, `nil` otherwise. This behavior is useful when chaining comparisons:
`a = %w( z Bb bB bb BB a aA Aa AA A )`
`b = a.sort {|a,b| (a.downcase <=> b.downcase).nonzero? || a <=> b }`
`b` | » | `["A", "a", "AA", "Aa", "aA", "BB", "Bb", "bB", "bb", "z"]`
remainder | num.remainder( aNumeric ) -> aNumeric
|  | If num and aNumeric have different signs, returns mod-aNumeric; otherwise, returns mod. In both cases mod is the value num.`modulo(` aNumeric `)`. The differences between `remainder` and modulo (`%`) are shown in Table 22.6 on page 350.
zero? | num.zero? -> `true` or `false`
|  | Returns `true` if num has a zero value.

Previous < | Contents ^ | Next >

Extracted from the book "Programming Ruby - The Pragmatic Programmer's Guide"
Copyright © 2001 by Addison Wesley Longman, Inc. This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, v1.0 or later (the latest version is presently available at http://www.opencontent.org/openpub/)).

Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder.

Distribution of the work or derivative of the work in any standard (paper) book form is prohibited unless prior permission is obtained from the copyright holder.