diff --git a/ext/bigdecimal/bigdecimal.c b/ext/bigdecimal/bigdecimal.c index d9247790..f2e7deeb 100644 --- a/ext/bigdecimal/bigdecimal.c +++ b/ext/bigdecimal/bigdecimal.c @@ -1867,7 +1867,7 @@ BigDecimal_divmod(VALUE self, VALUE r) NULLABLE_BDVALUE div, mod; if (BigDecimal_DoDivmod(self, r, &div, &mod, false)) { - return rb_assoc_new(CheckGetValue(bdvalue_nonnullable(div)), CheckGetValue(bdvalue_nonnullable(mod))); + return rb_assoc_new(BigDecimal_to_i(CheckGetValue(bdvalue_nonnullable(div))), CheckGetValue(bdvalue_nonnullable(mod))); } return DoSomeOne(self,r,rb_intern("divmod")); } diff --git a/test/bigdecimal/test_bigdecimal.rb b/test/bigdecimal/test_bigdecimal.rb index 0062bfe1..d3ae0002 100644 --- a/test/bigdecimal/test_bigdecimal.rb +++ b/test/bigdecimal/test_bigdecimal.rb @@ -1245,6 +1245,10 @@ def test_divmod assert_equal([0, 0], BigDecimal("0").divmod(2)) + quotient, reminder = BigDecimal("10").divmod(3) + assert_kind_of(Integer, quotient) + assert_kind_of(BigDecimal, reminder) + BigDecimal.mode(BigDecimal::EXCEPTION_NaN, false) assert_raise(ZeroDivisionError){BigDecimal("0").divmod(0)} end