diff --git a/ext/bigdecimal/bigdecimal.c b/ext/bigdecimal/bigdecimal.c index b7f78779..d7873354 100644 --- a/ext/bigdecimal/bigdecimal.c +++ b/ext/bigdecimal/bigdecimal.c @@ -2123,8 +2123,8 @@ BigDecimal_divmod(VALUE self, VALUE r) Real *div = NULL, *mod = NULL; if (BigDecimal_DoDivmod(self, r, &div, &mod)) { - SAVE(div); SAVE(mod); - return rb_assoc_new(VpCheckGetValue(div), VpCheckGetValue(mod)); + SAVE(div); SAVE(mod); + return rb_assoc_new(BigDecimal_to_i(VpCheckGetValue(div)), VpCheckGetValue(mod)); } return DoSomeOne(self,r,rb_intern("divmod")); } diff --git a/test/bigdecimal/test_bigdecimal.rb b/test/bigdecimal/test_bigdecimal.rb index 19a6fb69..8c956fb1 100644 --- a/test/bigdecimal/test_bigdecimal.rb +++ b/test/bigdecimal/test_bigdecimal.rb @@ -1093,6 +1093,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