diff --git a/complex.c b/complex.c
index 35e56283ef..eb2a76737b 100644
--- a/complex.c
+++ b/complex.c
@@ -394,7 +394,7 @@ static VALUE nucomp_s_convert(int argc, VALUE *argv, VALUE klass);
/*
* call-seq:
- * Complex(x[, y]) -> numeric
+ * Complex(x[, y], exception: false) -> numeric
*
* Returns x+i*y;
*
@@ -403,6 +403,9 @@ static VALUE nucomp_s_convert(int argc, VALUE *argv, VALUE klass);
* Complex(nil) #=> TypeError
* Complex(1, nil) #=> TypeError
*
+ * Complex(1, nil, exception: false) # => nil
+ * Complex('1+2', exception: false) # => nil
+ *
* Syntax of string form:
*
* string form = extra spaces , complex , extra spaces ;
diff --git a/object.c b/object.c
index 637a301791..4778118391 100644
--- a/object.c
+++ b/object.c
@@ -3221,7 +3221,7 @@ opts_exception_p(VALUE opts)
/*
* call-seq:
- * Integer(arg, base=0) -> integer
+ * Integer(arg, base=0, exception: true) -> integer
*
* Converts arg to an Integer
.
* Numeric types are converted directly (with floating point numbers
@@ -3232,15 +3232,23 @@ opts_exception_p(VALUE opts)
* In any case, strings should be strictly conformed to numeric
* representation. This behavior is different from that of
* String#to_i
. Non string values will be converted by first
- * trying to_int
, then to_i
. Passing nil
- * raises a TypeError.
+ * trying to_int
, then to_i
.
+ *
+ * Passing nil
raises a TypeError, while passing String that
+ * does not conform with numeric representation raises an ArgumentError.
+ * This behavior can be altered by passing exception: false
,
+ * in this case not convertible value will return nil
.
*
* Integer(123.999) #=> 123
* Integer("0x1a") #=> 26
* Integer(Time.new) #=> 1204973019
* Integer("0930", 10) #=> 930
* Integer("111", 2) #=> 7
- * Integer(nil) #=> TypeError
+ * Integer(nil) #=> TypeError: can't convert nil into Integer
+ * Integer("x") #=> ArgumentError: invalid value for Integer(): "x"
+ *
+ * Integer("x", exception: false) #=> nil
+ *
*/
static VALUE
@@ -3575,17 +3583,19 @@ rb_Float(VALUE val)
/*
* call-seq:
- * Float(arg) -> float
+ * Float(arg, exception: true) -> float
*
* Returns arg converted to a float. Numeric types are converted
* directly, and with exception to string and nil the rest are converted using arg.to_f.
* Converting a string
with invalid characters will result in a ArgumentError
.
* Converting nil
generates a TypeError
.
+ * Exceptions could be suppressed by passing exception: false
.
*
* Float(1) #=> 1.0
* Float("123.456") #=> 123.456
* Float("123.0_badstring") #=> ArgumentError: invalid value for Float(): "123.0_badstring"
* Float(nil) #=> TypeError: can't convert nil into Float
+ * Float("123.0_badstring", exception: false) #=> nil
*/
static VALUE
diff --git a/rational.c b/rational.c
index a6a94368e8..f668cc4691 100644
--- a/rational.c
+++ b/rational.c
@@ -529,8 +529,8 @@ static VALUE nurat_s_convert(int argc, VALUE *argv, VALUE klass);
/*
* call-seq:
- * Rational(x, y) -> rational
- * Rational(arg) -> rational
+ * Rational(x, y, exception: true) -> rational
+ * Rational(arg, exception: true) -> rational
*
* Returns +x/y+ or +arg+ as a Rational.
*
@@ -546,6 +546,8 @@ static VALUE nurat_s_convert(int argc, VALUE *argv, VALUE klass);
* Rational(nil) #=> TypeError
* Rational(1, nil) #=> TypeError
*
+ * Rational("10 cents", exception: false) #=> nil
+ *
* Syntax of the string form:
*
* string form = extra spaces , rational , extra spaces ;