Fixnum, Bignum oder Float stammen.
Ruby legt für ganze Zahlen keine Obergrenze fest und wechselt
bei Bedarf automatisch zwischen platzsparenden Fixnum-Zahlen und
beliebig großen Bignum-Zahlen hin und her, wann immer
die "`magische Grenze"'
überschritten
wird (siehe State-Pattern
[GOF94]).
meineZahl = 2**30 #-> 1073741824 meineZahl.class #-> Bignum meineZahl -= 1 #-> 1073741823 meineZahl.class #-> Fixnum
Dabei werden Bignum-Zahlen mit allen Ziffern gespeichert, so dass keine Rundungsverluste auftreten. Bei den Appetithappen (Kapitel 1.2) haben wir mit der Fakultät von 100 schon ein Beispiel gesehen.
Um die Zahlen bei der Eingabe lesbarer zu machen, kann man
die Ziffern mit _ gruppieren.
342_599_001 == 342599001 #-> true
Jede Fließkommazahl ist eine Instanz
der Klasse "`Float"'. Eine konstante
Fließkommazahl muss einen Dezimalpunkt enthalten, die übliche
E-Notation zur Angabe von Zehnerpotenzen steht ebenfalls zur Verfügung.
Float.new(3) #-> 3.0 3.141.class #-> Float 3.4567e3 == 3456.7 #-> true
Ein "`Float"'
in Ruby entspricht einem "`double"' in C in der jeweils verwendeten
Rechnerarchitektur. Das bedeutet, dass Fließkommaberechnungen auf unterschiedlichen
Plattformen unterschiedliche Ergebnisse haben können!
Bei Bedarf können Zahlen mit der
Methode
to_s in eine
Zeichenkette umgewandelt werden:
1.to_s #-> "1" 1.3.to_s #-> "1.3"
Ruby unterstützt auch die Optionen zur formatierten Ausgabe, wie sie in C, Perl und Python vorhanden sind:
printf "Nr. %4d: %.2f", 1, 1.355 #-> Nr. 1: 1.35 "Nr. %4d: %.2f" % [2, 1.345] #-> "Nr. 2: 1.34"
Benötigt man höhere Genauigkeiten, steht im Ruby Application Archive [RAA]
die Klasse BigFloat von Shigeo Kobayashi zur Verfügung.
Für numerische Anwendungen, die Zahlen in Arrays speichern müssen,
gibt es an der gleichen Stelle das NArray-Paket. Damit werden
Ganzzahl- und Fließkommarechnungen fast so schnell wie in C.
Arithmetik sieht in Ruby genauso aus wie in anderen Programmiersprachen, da Ruby die üblichen Vorrangregeln befolgt: Klammer vor Hoch vor Punkt vor Strich. Allerdings gibt es neben dieser bekannten Schreibweise noch eine zweite, die den Objektcharakter von Zahlen in Ruby betont:
3 + 5.7 #-> 8.7 3.+(5.7) #-> 8.7Im ersten Beispiel werden
3 und 5.7 addiert, während in der
zweiten Zeile der Fixnum-Instanz 3 die Methode![[*]](footnote.png)
+ mit dem
Paramter 5.7 übermittelt wird. Für das Objekt 3 besteht die
Implementation der Methode + darin, die Summe aus der angesprochenen
Zahl und dem übergebenen Argument zu bilden.