Поиск…


замечания

Иерархия номеров

Ruby включает несколько встроенных классов для представления чисел:

Numeric
  Integer
    Fixnum    # 1
    Bignum    # 10000000000000000000
  Float       # 1.0
  Complex     # (1+0i)
  Rational    # Rational(2, 3) == 2/3
  BigDecimal  # not loaded by default

Наиболее распространенными являются:

  • Fixnum для представления, например, положительных и отрицательных целых чисел
  • Float для представления чисел с плавающей запятой

BigDecimal является единственным, не загруженным по умолчанию. Вы можете загрузить его с помощью:

require "bigdecimal"

Обратите внимание, что в ruby ​​2.4+, Fixnum и Bignum объединены; все целые числа теперь являются просто членами класса Integer . Для обратной совместимости Fixnum == Bignum == Integer .

Создание целых чисел

0       # creates the Fixnum 0
123     # creates the Fixnum 123
1_000   # creates the Fixnum 1000. You can use _ as separator for readability

По умолчанию обозначение является базой 10. Однако существуют и другие встроенные обозначения для разных баз:

0xFF    # Hexadecimal representation of 255, starts with a 0x
0b100   # Binary representation of 4, starts with a 0b
0555    # Octal representation of 365, starts with a 0 and digits

Преобразование строки в целое

Вы можете использовать метод Integer для преобразования String в Integer :

Integer("123")      # => 123
Integer("0xFF")     # => 255
Integer("0b100")    # => 4
Integer("0555")     # => 365

Вы также можете передать базовый параметр методу Integer для преобразования чисел из определенной базы

Integer('10', 5)    # => 5
Integer('74', 8)    # => 60
Integer('NUM', 36)  # => 30910

Обратите внимание, что метод вызывает ArgumentError если параметр не может быть преобразован:

Integer("hello")
# raises ArgumentError: invalid value for Integer(): "hello"
Integer("23-hello")
# raises ArgumentError: invalid value for Integer(): "23-hello"

Вы также можете использовать метод String#to_i . Однако этот метод несколько более разрешительный и имеет другое поведение, чем Integer :

"23".to_i         # => 23
"23-hello".to_i   # => 23
"hello".to_i      # => 0

String#to_i принимает аргумент, основание для интерпретации числа как:

"10".to_i(2) # => 2
"10".to_i(3) # => 3
"A".to_i(16) # => 10

Преобразование числа в строку

Fixnum # to_s принимает необязательный базовый аргумент и представляет заданное число в этой базе:

2.to_s(2)   # => "10"
3.to_s(2)   # => "11"
3.to_s(3)   # => "10"
10.to_s(16) # => "a"

Если аргумент не указан, то он представляет число в базе 10

2.to_s # => "2"
10423.to_s # => "10423"

Разделение двух чисел

При делении двух чисел обратите внимание на тип, который вы хотите в ответ. Обратите внимание, что разделение двух целых чисел вызовет целочисленное деление . Если ваша цель состоит в том, чтобы запустить float-деление, по крайней мере один из параметров должен иметь тип float .

Целочисленное подразделение:

3 / 2 # => 1

Поплавковое деление

3 / 3.0 # => 1.0

16 / 2 / 2    # => 4
16 / 2 / 2.0  # => 4.0
16 / 2.0 / 2  # => 4.0
16.0 / 2 / 2  # => 4.0

Рациональное число

Rational представляет собой рациональное число как числитель и знаменатель:

r1 = Rational(2, 3)
r2 = 2.5.to_r
r3 = r1 + r2
r3.numerator   # => 19
r3.denominator # => 6
Rational(2, 4) # => (1/2)

Другие способы создания Rational

Rational('2/3')  # => (2/3)
Rational(3)      # => (3/1)
Rational(3, -5)  # => (-3/5)
Rational(0.2)    # => (3602879701896397/18014398509481984)
Rational('0.2')  # => (1/5)
0.2.to_r         # => (3602879701896397/18014398509481984)
0.2.rationalize  # => (1/5)
'1/4'.to_r       # => (1/4)

Сложные числа

1i     # => (0+1i)
1.to_c # => (1+0i)
rectangular = Complex(2, 3)  # => (2+3i)
polar       = Complex('1@2') # => (-0.4161468365471424+0.9092974268256817i)

polar.rectangular # => [-0.4161468365471424, 0.9092974268256817]
rectangular.polar # => [3.605551275463989, 0.982793723247329]
rectangular + polar # => (1.5838531634528576+3.909297426825682i)

Четные и нечетные числа

even? метод может быть использован для определения того, является ли число четным

4.even?      # => true
5.even?      # => false

odd? метод может быть использован для определения того, является ли число нечетным

4.odd?       # => false
5.odd?       # => true

Число округлений

round метод будет округлять число, если первая цифра после десятичной точки равна 5 или выше и округляется вниз, если эта цифра равна 4 или ниже. Это требует дополнительного аргумента для точности, которую вы ищете.

4.89.round        # => 5
4.25.round        # => 4
3.141526.round(1) # => 3.1
3.141526.round(2) # => 3.14
3.141526.round(4) # => 3.1415

Числа с плавающей запятой также могут быть округлены до самого высокого целого числа, меньшего, чем число с методом floor

4.9999999999999.floor # => 4

Их также можно округлить до наименьшего целого числа, превышающего число, используя метод ceil

4.0000000000001.ceil  # => 5


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow