mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* ext/bigdecimal/bigdecimal.c (BigDecimal_coerce): support coerce with a
Rational. The precision used for instantiate a BigDecimal from the given Rational is obtained from the receiver BigDecimal. * test/bigdecimal/test_bigdecimal.rb (test_coerce): add a test for the above change. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31868 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
8b70931028
commit
d7058e10dc
3 changed files with 26 additions and 2 deletions
|
@ -1,3 +1,12 @@
|
|||
Tue Jun 1 00:07:00 2011 Kenta Murata <mrkn@mrkn.jp>
|
||||
|
||||
* ext/bigdecimal/bigdecimal.c (BigDecimal_coerce): support coerce with a
|
||||
Rational. The precision used for instantiate a BigDecimal from the
|
||||
given Rational is obtained from the receiver BigDecimal.
|
||||
|
||||
* test/bigdecimal/test_bigdecimal.rb (test_coerce): add a test for the
|
||||
above change.
|
||||
|
||||
Tue May 31 23:49:08 2011 Tadayoshi Funaba <tadf@dotrb.org>
|
||||
|
||||
* ext/date/date_core.c (offset_to_sec): fixed invalid validation.
|
||||
|
|
|
@ -675,12 +675,21 @@ BigDecimal_coerce(VALUE self, VALUE other)
|
|||
ENTER(2);
|
||||
VALUE obj;
|
||||
Real *b;
|
||||
|
||||
if (TYPE(other) == T_FLOAT) {
|
||||
obj = rb_assoc_new(other, BigDecimal_to_f(self));
|
||||
} else {
|
||||
GUARD_OBJ(b,GetVpValue(other,1));
|
||||
}
|
||||
else {
|
||||
if (TYPE(other) == T_RATIONAL) {
|
||||
Real* pv = DATA_PTR(self);
|
||||
GUARD_OBJ(b, GetVpValueWithPrec(other, pv->Prec*VpBaseFig(), 1));
|
||||
}
|
||||
else {
|
||||
GUARD_OBJ(b, GetVpValue(other, 1));
|
||||
}
|
||||
obj = rb_assoc_new(b->obj, self);
|
||||
}
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
|
|
|
@ -485,6 +485,12 @@ class TestBigDecimal < Test::Unit::TestCase
|
|||
assert_instance_of(Float, a)
|
||||
assert_instance_of(Float, b)
|
||||
assert_equal(2, 1 + BigDecimal.new("1"), '[ruby-core:25697]')
|
||||
|
||||
a, b = BigDecimal("1").coerce(1.quo(10))
|
||||
assert_equal(BigDecimal("0.1"), a, '[ruby-core:34318]')
|
||||
|
||||
a, b = BigDecimal("0.11111").coerce(1.quo(3))
|
||||
assert_equal(BigDecimal("0." + "3"*a.precs[0]), a)
|
||||
end
|
||||
|
||||
def test_uplus
|
||||
|
|
Loading…
Add table
Reference in a new issue