mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* ext/bigdecimal (BigDecimal_to_i): Integer#** may return flonum.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31976 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
14c504b3cc
commit
c2f9e1b100
2 changed files with 13 additions and 4 deletions
|
@ -1,3 +1,7 @@
|
|||
Fri Jun 10 01:06:29 2011 Tadayoshi Funaba <tadf@dotrb.org>
|
||||
|
||||
* ext/bigdecimal (BigDecimal_to_i): Integer#** may return flonum.
|
||||
|
||||
Fri Jun 10 00:35:12 2011 Tadayoshi Funaba <tadf@dotrb.org>
|
||||
|
||||
* complex.c (string_to_c_internal): uses rb_reg_nth_match;
|
||||
|
|
|
@ -564,19 +564,24 @@ BigDecimal_to_i(VALUE self)
|
|||
VALUE a = BigDecimal_split(self);
|
||||
VALUE digits = RARRAY_PTR(a)[1];
|
||||
VALUE numerator = rb_funcall(digits, rb_intern("to_i"), 0);
|
||||
VALUE ret;
|
||||
ssize_t dpower = e - (ssize_t)RSTRING_LEN(digits);
|
||||
|
||||
if (VpGetSign(p) < 0) {
|
||||
numerator = rb_funcall(numerator, '*', 1, INT2FIX(-1));
|
||||
}
|
||||
if (dpower < 0) {
|
||||
return rb_funcall(numerator, rb_intern("div"), 1,
|
||||
ret = rb_funcall(numerator, rb_intern("div"), 1,
|
||||
rb_funcall(INT2FIX(10), rb_intern("**"), 1,
|
||||
INT2FIX(-dpower)));
|
||||
}
|
||||
return rb_funcall(numerator, '*', 1,
|
||||
rb_funcall(INT2FIX(10), rb_intern("**"), 1,
|
||||
INT2FIX(dpower)));
|
||||
else
|
||||
ret = rb_funcall(numerator, '*', 1,
|
||||
rb_funcall(INT2FIX(10), rb_intern("**"), 1,
|
||||
INT2FIX(dpower)));
|
||||
if (TYPE(ret) == T_FLOAT)
|
||||
rb_raise(rb_eFloatDomainError, "Infinity");
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue