Programmierung in Ruby

Der Leitfaden der Pragmatischen Programmierer

class Numeric
Parent: Object
Version: 1.6

Index:

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



Subclasses: Float, Integer

Numeric ist der fundamentale Basistyp für die konkreten Zahlen Klassen Float, Fixnum und Bignum.
mixins
Comparable: <, <=, ==, >=, >, between?

Unterschied zwischen Modulo und Rest. Der Modulooperator (``%'') trägt immer das Vorzeichen des Divisors, während remainder immer das Vorzeichen des Dividenden behält.

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

Unäres Plus---Gibt den Wert des Empfängers zurück.

--@ --num-> eineZahl

Unäres Minus---Gibt den negativen Wert des Empfängers zurück.

abs num.abs -> eineZahl

Git den Absolutwert von num zurück.

12.abs » 12
(-34.56).abs » 34.56
-34.56.abs » 34.56

coerce num.coerce( eineZahl ) -> einArray

Wenn eineZahl vom selben Typ ist wie num, gibt die Methode ein Array mit eineZahl und num zurück. Sonst wird ein Array mit den Gleitkommadarstellungen von eineZahl und num (jeweils als Float-Objekt) zurückgegeben.

1.coerce(2.5) » [2.5, 1.0]
1.2.coerce(3) » [3.0, 1.2]
1.coerce(2) » [2, 1]

divmod num.divmod( eineZahl ) -> einArray

Gibt ein Array zurück, das den Quotienten und den Modulus enthält, die bei der Teilung von num durch eineZahl erhalten werden. If q, r = x.divmod(y),
q = floor(float(x) / float(y))
x = q * y + r

Der Quotient wird auf -unendlich gerundet. Vgl. obenstehende Tabelle.

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?( eineZahl ) -> true oder false

Gibt true zurück, wenn num und eineZahl vom selben Typ sind und den gleichen Wert haben.

1 == 1.0 » true
1.eql?(1.0) » false
(1.0).eql?(1.0) » true

integer? num.integer? -> true oder false

Gibt true zurück, wenn num eine ganze Zahl ist (gilt auch für ganze Zahlen der Typen Fixnum und Bignum).

modulo num.modulo( eineZahl ) -> eineZahl

Equivalent mit num.divmod(eineZahl)[1].

nonzero? num.nonzero? -> num oder nil

Gibt num zurück, wenn num ungleich Null ist bzw. nil, wenn nicht. Dieses Verhalten ist bei der Verkettung von Vergleichen hilfreich:

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( eineZahl ) -> eineZahl

Wenn num und eineZahl verschiedene Vorzeichen haben, gibt die Methode mod-eineZahl zurück; sonst wird mod zurück gegeben. In beiden Fällen hat mod den Wert num.modulo(eineZahl). Die Unterschiede zwischen remainder und modulo (%) sind in der obenstehenden Tabelle aufgezeigt.

zero? num.zero? -> true oder false

Gibt true zurück, wenn num den Wert Null hat.


Extracted from the book "Programming Ruby - The Pragmatic Programmer's Guide"
Übersetzung: Carsten Schinzer
Für das englische Original:
© 2000 Addison Wesley Longman, Inc. Released under the terms of the Open Publication License V1.0. That reference is available for download.
Diese Lizenz sowie das Original vom Herbst 2001 bilden die Grundlage der Übersetzung
Es wird darauf hingewiesen, dass sich die Lizenz des englischen Originals inzwischen geändert hat.
Für die deutsche Übersetzung:
© 2002 Jürgen Katins
Der Copyright-Eigner stellt folgende Lizenzen zur Verfügung:
Nicht-freie Lizenz:
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.
Freie Lizenz:
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".