Числа 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