In Ruby, you can get the first digit of an integer in the following ways:

## Using `Integer#digits`

You can use the `Integer#digits`

method in the following way to get the first digit of an integer:

- Convert integer to absolute form;
- Use
`Integer#digits`

to convert the integer to a*reversed*array of digits (i.e. last digit appearing first and first digit appearing last in the resulting array); - Access the last index of the array (which would have the first digit);
- Add back the minus sign if the number was originally negative.

For example, you can implement this like so:

def first_digit(num) digit = num.abs.digits[-1] digit *= num.negative? ? -1 : 1 end print first_digit(0) #=> 0 print first_digit(1234) #=> 1 print first_digit(-1234) #=> -1

## Using Regular Expression

You can use regular expression in the following way to get the first digit of an integer:

- Convert integer to string and use
`String#slice(regexp)`

method with the`\d`

(or`[0-9]`

) pattern to get the first digit; - Convert numeric string back to integer;
- Add back the minus sign if the number was originally negative.

For example, you can implement this like so:

def first_digit(num) digit = num.to_s[/\d/].to_i digit *= num.negative? ? -1 : 1 end print first_digit(0) #=> 0 print first_digit(1234) #=> 1 print first_digit(-1234) #=> -1

## Using Floored Division

You can use floored division (i.e. `floor(x/y)`

) to get the first digit of an integer in the following steps:

- Convert integer to absolute form to get length of the integer;
- Get the quotient (which will be the first digit of the integer) — this is calculated as
`floor(int / 10 ** (intLength - 1))`

; - Convert the quotient (which would be a float) to integer;
- Add back the minus sign if the number was originally negative.

For example, you can implement this like so:

def first_digit(num) len = num.abs.to_s.length divisor = 10 ** (len - 1) digit = num.abs.fdiv(divisor).to_i digit *= num.negative? ? -1 : 1 end print first_digit(0) #=> 0 print first_digit(1234) #=> 1 print first_digit(-1234) #=> -1

This works in the following way:

# num = -1234 # len = 4 # divisor = 10 ^ (4 - 1) = 1000 # digit = floor(1234 / 1000) # digit = floor(1.234) # digit = 1 # digit = 1 * -1 # digit = -1

You can also use the `Numeric#divmod`

method to achieve the same (instead of using `Numeric#fdiv`

), for example, in the following way:

def first_digit(num) len = num.abs.to_s.length divisor = 10 ** (len - 1) digit, _ = num.abs.divmod(divisor) digit *= num.negative? ? -1 : 1 end print first_digit(0) #=> 0 print first_digit(1234) #=> 1 print first_digit(-1234) #=> -1

`Numeric#divmod`

returns an array with the quotient and the modulus, with the result already converted to integer.

## Using `String#slice`

You can use the `String#slice`

method to get the first digit of an integer in the following steps:

- Convert integer to absolute form;
- Convert the absolute value to string and get the first character;
- Convert
*sliced*numeric character back to integer; - Add back the minus sign if the number was originally negative.

For example, you can implement this like so:

def first_digit(num) digit = num.abs.to_s[0].to_i digit *= num.negative? ? -1 : 1 end print first_digit(0) #=> 0 print first_digit(1234) #=> 1 print first_digit(-1234) #=> -1

This is equivalent to using the `String#slice`

method, for example, like so:

def first_digit(num) digit = num.abs.to_s.slice(0).to_i digit *= num.negative? ? -1 : 1 end print first_digit(0) #=> 0 print first_digit(1234) #=> 1 print first_digit(-1234) #=> -1

This post was published by Daniyal Hamid. Daniyal currently works as the Head of Engineering in Germany and has 20+ years of experience in software engineering, design and marketing. Please show your love and support by sharing this post.