End of Life Ruby 3.0 has reached end of life and gets no more fixes. Switch to Ruby 4.0 →
Kernel#BigDecimal
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;
}
Create a new BigDecimal object.
- initial
-
The initial value, as an
Integer, aFloat, aRational, aBigDecimal, or aString.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.
trueby default, if passedfalse, just returnsnilfor invalid.
Exceptions
TypeError-
If the
initialtype is neitherInteger,Float,Rational, norBigDecimal, this exception is raised. TypeError-
If the
digitsis not anInteger, this exception is raised. ArgumentError-
If
initialis aFloat, and thedigitsis larger thanFloat::DIG+ 1, this exception is raised. ArgumentError-
If the
initialis aFloatorRational, and thedigitsvalue is omitted, this exception is raised.