Method: Integer#floor

Defined in:
numeric.c

#floor(*args) ⇒ Object

:markup: markdown

call-seq:

floor(ndigits = 0) -> integer

Returns an integer that is a “floor” value for ‘self`, as specified by the given `ndigits`, which must be an [integer-convertible object](implicit_conversion.rdoc@Integer-Convertible+Objects).

  • When ‘self` is zero, returns zero (regardless of the value of `ndigits`):

    ```
    0.floor(2)  # => 0
    0.floor(-2) # => 0
    ```
    
  • When ‘self` is non-zero and `ndigits` is non-negative, returns `self`:

    ```
    555.floor     # => 555
    555.floor(50) # => 555
    ```
    
  • When ‘self` is non-zero and `ndigits` is negative, returns a value based on a computed granularity:

    - The granularity is `10 ** ndigits.abs`.
    - The returned value is the largest multiple of the granularity
      that is less than or equal to `self`.
    
    Examples with positive `self`:
    
    | ndigits | Granularity | 1234.floor(ndigits) |
    |--------:|------------:|--------------------:|
    | -1      | 10          | 1230                |
    | -2      | 100         | 1200                |
    | -3      | 1000        | 1000                |
    | -4      | 10000       | 0                   |
    | -5      | 100000      | 0                   |
    
    Examples with negative `self`:
    
    | ndigits | Granularity | -1234.floor(ndigits) |
    |--------:|------------:|---------------------:|
    | -1      | 10          | -1240                |
    | -2      | 100         | -1300                |
    | -3      | 1000        | -2000                |
    | -4      | 10000       | -10000               |
    | -5      | 100000      | -100000              |
    

Related: Integer#ceil.



5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863
# File 'numeric.c', line 5852

static VALUE
int_floor(int argc, VALUE* argv, VALUE num)
{
    int ndigits;

    if (!rb_check_arity(argc, 0, 1)) return num;
    ndigits = NUM2INT(argv[0]);
    if (ndigits >= 0) {
        return num;
    }
    return rb_int_floor(num, ndigits);
}