class Faker::Number

Public Class Methods

between(from: 1.00, to: 5000.00) click to toggle source

Produces a number between two provided values. Boundaries are inclusive.

@param from [Numeric] The lowest number to include. @param to [Numeric] The highest number to include. @return [Numeric]

@example

Faker::Number.between(from: 1, to: 10) #=> 7
Faker::Number.between(from: 0.0, to: 1.0) #=> 0.7844640543957383

@faker.version 1.0.0

# File lib/faker/default/number.rb, line 166
def between(from: 1.00, to: 5000.00)
  Faker::Base.rand_in_range(from, to)
end
binary(digits: 4) click to toggle source

Produces a number in binary format.

@param digits [Integer] Number of digits to generate the binary as string @return [String]

@example

Faker::Number.binary(digits: 4) #=> "1001"

@faker.version next

# File lib/faker/default/number.rb, line 130
def binary(digits: 4)
  bin = ''
  digits.times { bin += rand(2).to_s(2) }
  bin
end
decimal(l_digits: 5, r_digits: 2) click to toggle source

Produces a float.

@param l_digits [Integer] Number of digits that the generated decimal should have to the left of the decimal point. @param r_digits [Integer] Number of digits that the generated decimal should have to the right of the decimal point. @return [Float]

@example

Faker::Number.decimal(l_digits: 2) #=> 11.88
Faker::Number.decimal(l_digits: 3, r_digits: 3) #=> 181.843

@faker.version 1.0.0

# File lib/faker/default/number.rb, line 69
def decimal(l_digits: 5, r_digits: 2)
  l_d = number(digits: l_digits)

  # Ensure the last digit is not zero
  # so it does not get truncated on converting to float
  r_d = generate(r_digits - 1).join + non_zero_digit.to_s

  "#{l_d}.#{r_d}".to_f
end
decimal_part(digits: 10) click to toggle source

Produce a number with a number of digits, preserves leading zeroes.

@param digits [Integer] Number of digits that the generated number should have. @return [String]

@example

Faker::Number.decimal_part(digits: 2) #=> "09"

@faker.version 1.0.0

# File lib/faker/default/number.rb, line 48
def decimal_part(digits: 10)
  num = ''
  if digits > 1
    num = non_zero_digit
    digits -= 1
  end
  leading_zero_number(digits: digits) + num.to_s
end
digit() click to toggle source

Produces a single-digit integer.

@return [Integer]

@example

Faker::Number.digit #=> 1

@faker.version 1.0.0

# File lib/faker/default/number.rb, line 101
def digit
  rand(10)
end
hexadecimal(digits: 6) click to toggle source

Produces a number in hexadecimal format.

@param digits [Integer] Number of digits in the he @return [String]

@example

Faker::Number.hexadecimal(digits: 3) #=> "e74"

@faker.version 1.0.0

# File lib/faker/default/number.rb, line 115
def hexadecimal(digits: 6)
  hex = ''
  digits.times { hex += rand(16).to_s(16) }
  hex
end
leading_zero_number(digits: 10) click to toggle source

Produce a random number with a leading zero.

@param digits [Integer] Number of digits that the generated number should have. @return [String]

@example

Faker::Number.leading_zero_number(digits: 10) #=> "0669336915"

@faker.version 1.0.0

# File lib/faker/default/number.rb, line 34
def leading_zero_number(digits: 10)
  "0#{(2..digits).collect { digit }.join}"
end
negative(from: -5000.00, to: -1.00) click to toggle source

Produces a negative float.

@param from [Integer] The lower boundary. @param to [Integer] The higher boundary. @return [Float]

@example

Faker::Number.negative #=> -4480.042585669558

@faker.version 1.0.0

# File lib/faker/default/number.rb, line 213
def negative(from: -5000.00, to: -1.00)
  random_number = between(from: from, to: to)

  less_than_zero(random_number)
end
non_zero_digit() click to toggle source

Produces a non-zero single-digit integer.

@return [Integer]

@example

Faker::Number.non_zero_digit #=> 8

@faker.version 1.0.0

# File lib/faker/default/number.rb, line 88
def non_zero_digit
  rand(1..9)
end
normal(mean: 1, standard_deviation: 1) click to toggle source

Produces a float given a mean and standard deviation.

@param mean [Integer] @param standard_deviation [Numeric] @return [Float]

@example

Faker::Number.normal(mean: 50, standard_deviation: 3.5) #=> 47.14669604069156

@faker.version 1.0.0

# File lib/faker/default/number.rb, line 147
def normal(mean: 1, standard_deviation: 1)
  theta = 2 * Math::PI * rand
  rho = Math.sqrt(-2 * Math.log(1 - rand))
  scale = standard_deviation * rho
  mean + scale * Math.cos(theta)
end
number(digits: 10) click to toggle source

Produce a random number.

@param digits [Integer] Number of digits that the generated number should have. @return [Integer]

@example

Faker::Number.number(digits: 10) #=> 1968353479

@faker.version 1.0.0

# File lib/faker/default/number.rb, line 16
def number(digits: 10)
  return if digits < 1
  return rand(0..9).round if digits == 1

  # Ensure the first digit is not zero
  ([non_zero_digit] + generate(digits - 1)).join.to_i
end
positive(from: 1.00, to: 5000.00) click to toggle source

Produces a positive float.

@param from [Integer] The lower boundary. @param to [Integer] The higher boundary. @return [Float]

@example

Faker::Number.positive #=> 235.59238499107653

@faker.version 1.0.0

# File lib/faker/default/number.rb, line 196
def positive(from: 1.00, to: 5000.00)
  random_number = between(from: from, to: to)

  greater_than_zero(random_number)
end
within(range: 1.00..5000.00) click to toggle source

Produces a number within two provided values. Boundaries are inclusive or exclusive depending on the range passed.

@param range [Range] The range from which to generate a number. @return [Numeric]

@example

Faker::Number.within(range: 1..10) #=> 7
Faker::Number.within(range: 0.0..1.0) #=> 0.7844640543957383

@faker.version 1.0.0

# File lib/faker/default/number.rb, line 181
def within(range: 1.00..5000.00)
  between(from: range.min, to: range.max)
end

Private Class Methods

generate(count) click to toggle source
# File lib/faker/default/number.rb, line 221
def generate(count)
  return [] if count.zero?

  Array.new(count) { digit }
end
greater_than_zero(number) click to toggle source
# File lib/faker/default/number.rb, line 227
def greater_than_zero(number)
  should_be(number, :>)
end
less_than_zero(number) click to toggle source
# File lib/faker/default/number.rb, line 231
def less_than_zero(number)
  should_be(number, :<)
end
should_be(number, method_to_compare) click to toggle source
# File lib/faker/default/number.rb, line 235
def should_be(number, method_to_compare)
  if number.send(method_to_compare, 0)
    number
  else
    number * -1
  end
end