Числа ruby


Числовой объект в отличие от строкового может имеет 4 типа: Fixnum, Bignum, Complex и Float. Fixnum и Bignum используются для представления целых чисел и практически идентичны за исключение того, что Bignum используется для хранения более больших чисел, этот тип данных просто огромен.

Схема наследований числовых типов:

Числа ruby
5.class #=> Fixnum

999999999999999999.class #=> Bignum

5.6.class #=> Float

5.6.class.superclass #=> Numeric

(3 + 3i).class #=> Complex


Удобное представление чисел, при помещение в код больших чисел, вы можете использовать разделители разрядом для улучшения читабельности кода,

100_000_000 #=> 100000000

В Ruby можно с одинаковой легкостью работать сразу в нескольких системах исчислений. Для представления числа в каждой системе исчисления имеется специальный формат записи числа:

Бинарного (binary numbers):

0b1 #=> 1,
0b10 #=> 2
0b100 #=> 4


Восьмиричного (octal numbers):

0o1 #=> 1
0o10 #=> 8
0o100 #=> 64


Шестнадцетиричного (hexadicimal numbers):

0x1 #=> 1
0xf => 15
0x10 #=> 16
0x100 #=> 256


Работа с числами

Арифметические операции
Все арифметические операции реализованы в виде методов, однако, не смотря на это, как операторы имеют приоритет выполнения, например у метода выполняющего умножение приоритет больше, чем у метода выполняющего сложение, как и в математике.
Важное отличие руби языка от других языков, что нету инкремента и декремента, забудьте всякие i++ пока не поздно. И примите новый вариант обозначения
i += 1


+, -, *, /, ** — методы нахождения суммы, разности, произведения, результата деления, и возведения в степень, примеры:


1 * 3 + 5 / 5 #=> 4
10 ** 2 #=> 100
5 ** 3 #=> 125


Далее пойдут методы для работы с числами:

#remainder и % — данные методы возвращают остаток от деления, примеры:

10 % 3.5 #=> 3.0
10.remainder 3.5 #=> 3.0


#div, / и #fdiv — данные методы возвращают соответственно результат деления нацело(/ и #div) и полный результат, включающий дробную часть (#fdiv), пример:

3.div 4 #=> 0
3 / 4 #=> 0
3.fdiv 4 #=> 0.75
10.div(3.5) #=> 2



#next, #succ — оба метода выполняют одно и то же, а именно: возвращают число больше на единицу (только для целых чисел), пример:

1.next #=> 2
1.next.next.next #=> 4
5.succ #=> 6


#abs и #magnitude возвращают модуль числа, пример:

-10.abs #=> 10


#odd? и #even? — методы возвращают true, если число соответственно нечетное и четное и false, если наоборот, примеры:

1.even? #=> false
1.odd? #=> true
2.even? #=> true


#zero? — метод проверяет является ли число нулем, если да, то возвращает true, иначе false, пример:

0.zero? #=> true
4.zero? #=> false


Преобразование

#to_f — метод используется для преобразования целого числа в число с плавающей точкой.

6.to_f #=> 6.0


#to_s — метод преобразует число в строку, пример:

125.to_s #=> "125"


#to_s позволяет задавать систему исчисления в котором будет представлено числа, а точнее строковый аналог числа (только для целых чисел), пример:

# двоичное представление
889.to_s(2) #=> "1101111001"


# шестнадцатиричное представление
23.to_s(16) #=> "17"
998.to_s(16) #=> "3e6"


# восьмиричное представление
8.to_s(8) #=> "10"
12.to_s(8) #=> "14"


#to_i и #to_int приводят объект в целочисленный тип, пример:

5.9.to_i #=> 5
"20 dollars per hour".to_i #=> 20



Округление
В Ruby существует целых три метода для округления числа: #ceil, #floor и #round. #round занимается тем, что по нормальным правилам округляет число до заданой степени точности, по умолчанию до целого, однако в качестве аргумента ему можно передать разряд, до которого следует округлить число. Метод #floor округляет число всегда до ближайшего меньшего целого числа, а #ceil, наоборот, до ближайшего большего целого, примеры:

1.978.round #=> 2
1.978.round(2) #=> 1.98
1.978.ceil #=> 2
1.978.floor #=> 1