Числа
Знакомство с представителями различных классов начнем с чисел. Целые числа в Ruby являются экземплярами класса Integer, который объединяет два подкласса: Fixnum или Bignum. Объектами класса Fixnum являются те целые, чье двоичное представление способно разместится в машинном слове (31 бит на большинстве компьютеров). Если число выходит за границы указанного диапазона, то оно автоматически преобразуется в объект класса Bignum, чей диапазон изменения ограничивается только объемом доступной памяти. Если в результате работы с объектами класса Bignum итоговое значение попадает в диапазон, задаваемый классом Fixnum, то выдаваемый результат преобразуется в экземпляр класса Fixnum.
123456 | Fixnum |
123_456 | Fixnum (подчеркивание игнорируется) |
-543 | отрицательное Fixnum |
123_456_789_123_456 | Bignum |
0xaabb | шестнадцатеричное |
0377 | восьмеричное |
-0b1010 | двоичное (отрицательное) |
0b001_001 | двоичное |
При записи целых чисел сначала указывается его знак (знак + обычно опускается). Далее следует основание системы счисления, в которой задается число (если оно отлично от 10): 0 - для восьмеричной, 0x - для шестнадцатеричной, 0b - для двоичной. Затем идет последовательность цифр, выражающих число в данной системе счисления. При записи больших чисел можно использовать символ подчеркивания, который игнорируется при обработке. В таблице представлены целые числа и указана их принадлежность к тому или иному классу.
Дробные числа задаются в десятичной системе счисления, при этом для отделения дробной части используется символ . (точка). Такие числа являются экземплярами класса Float, например, 12.34. Для задания дробных чисел может быть применена и экспоненциальная форма записи: два различных представления -.1234е2 и 1234е-2 задают одно и тоже число 12.34.
Для вычисления арифметических выражений применяются следующие операторы: + (сложение), - (вычитание), * (умножение), / (деление), % (остаток от деления), ** (возведение в степень). Порядок вычисления определяется стандартными приоритетами операций, а для его изменения используются круглые скобки.
Заметим, что если все аргументы выражения целые числа, то и результат будет целым, если же хотя бы одно из чисел, входящих в выражение - дробное, то и результат будет экземпляром класса Float.
Пример
Создайте файл с именем object.rb, в который поместите следующий фрагмент. Выполните программу и объясните результат.
puts 5/8 # 0 puts 5.0/8 # 0.625 puts 2**1000 puts ((2*500+1)*(2**500-1))
Пример 1.2.
(html, txt)
Отметим еще несколько методов, используемых при работе с числами (т. е. представителями класса Numeric). Среди них: ceil (нахождение наименьшего целого не меньшего, чем данное), floor (наибольшее целое, не большее данного), round (округление до ближайшего целого), получение абсолютной величины числа abs. Ниже приведены примеры использования этих методов.
puts 12.34.ceil # 13 puts 12.34.floor # 12 puts -12.ceil # -12 puts -12.floor # -12 puts 12.34.round # 12 puts 12.54.round # 13 puts -34.56.abs # 34.56
В Ruby имеется несколько методов, позволяющих преобразовывать объекты одного класса в другой.
to_f | Преобразовать объект в экземпляр класса Float | 1234.to_f | 1234.0 |
to_i | Преобразовать объект в экземпляр класса Fixnum или Bignum | -12.34.to_i | -12 |