Module: Kernel (Ruby 2.7.3)
Description: Module : Kernel - Ruby 2.7.3

### Home Classes Methods

### In Files

- bigdecimal/bigdecimal.c

### Methods

- #BigDecimal

### Class/Module Index

Quicksearch

- BigDecimal
- BigMath
- Float
- Integer
- Jacobian
- Kernel
- LUSolve
- Newton
- NilClass
- Rational
- String

No matching classes.

# Kernel

### Public Instance Methods

BigDecimal(initial, digits, exception: true) click to toggle source

Create a new `BigDecimal` object.

initial

  The initial value, as an `Integer`, a `Float`, a `Rational`, a `BigDecimal`, or a `String`.

  If it is a `String`, spaces are ignored and unrecognized characters terminate the value.

digits

  The number of significant digits, as an `Integer`. If omitted or 0, the number of significant digits is determined from the initial value.

  The actual number of significant digits used in computation is usually larger than the specified number.

exception

  Whether an exception should be raised on invalid arguments. `true` by default, if passed `false`, just returns `nil` for invalid.

#### Exceptions¶ ↑

TypeError

  If the `initial` type is neither `Integer`, `Float`, `Rational`, nor `BigDecimal`, this exception is raised.

TypeError

  If the `digits` is not an `Integer`, this exception is raised.

ArgumentError

  If `initial` is a `Float`, and the `digits` is larger than Float::DIG + 1, this exception is raised.

ArgumentError

  If the `initial` is a `Float` or `Rational`, and the `digits` value is omitted, this exception is raised.

                   static VALUE
    f_BigDecimal(int argc, VALUE *argv, VALUE self)
    {
        ENTER(1);
        Real *pv;
        VALUE obj;

        if (argc > 0 && CLASS_OF(argv[0]) == rb_cBigDecimal) {
            if (argc == 1 || (argc == 2 && RB_TYPE_P(argv[1], T_HASH))) return argv[0];
        }
        obj = TypedData_Wrap_Struct(rb_cBigDecimal, &BigDecimal_data_type, 0);
        pv = VpNewVarArg(argc, argv);
        if (pv == NULL) return Qnil;
        SAVE(pv);
        if (ToValue(pv)) pv = VpCopy(NULL, pv);
        RTYPEDDATA_DATA(obj) = pv;
        RB_OBJ_FREEZE(obj);
        return pv->obj = obj;
    }