Module: Kernel
Relationships & Source Files | |
Defined in: | ext/bigdecimal/bigdecimal.c |
Class Method Summary
-
BigDecimal(initial, digits, exception: true)
Create a new .BigDecimal object.
Class Method Details
BigDecimal(initial, digits, exception: true)
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 passedfalse
, just returnsnil
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 thedigits
is larger than Float::DIG + 1, this exception is raised. - ArgumentError
-
If the
initial
is a::Float
or::Rational
, and thedigits
value is omitted, this exception is raised.
# File 'ext/bigdecimal/bigdecimal.c', line 2718
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; }