module Kernel
Public Instance Methods
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.
true
by default, if passedfalse
, just returnsnil
for invalid.
Exceptions¶ ↑
- TypeError
-
If the
initial
type is neitherInteger
,Float
,Rational
, norBigDecimal
, this exception is raised. - TypeError
-
If the
digits
is not anInteger
, this exception is raised. - ArgumentError
-
If
initial
is aFloat
, and thedigits
is larger than Float::DIG + 1, this exception is raised. - ArgumentError
-
If the
initial
is aFloat
orRational
, and thedigits
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; }