mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
[ruby/bigdecimal] Fix trailing zero handling in rb_uint64_convert_to_BigDecimal
2056604d56
This commit is contained in:
parent
698d7947c3
commit
82f6085b3e
2 changed files with 8 additions and 1 deletions
|
@ -2736,12 +2736,15 @@ rb_uint64_convert_to_BigDecimal(uint64_t uval, RB_UNUSED_VAR(size_t digs), int r
|
|||
vp->exponent = len;
|
||||
VpSetSign(vp, 1);
|
||||
|
||||
size_t i;
|
||||
size_t i, ntz = 0;
|
||||
for (i = 0; i < len; ++i) {
|
||||
DECDIG r = uval % BASE;
|
||||
vp->frac[len - i - 1] = r;
|
||||
if (r == 0) ++ntz;
|
||||
uval /= BASE;
|
||||
}
|
||||
|
||||
vp->Prec -= ntz;
|
||||
}
|
||||
|
||||
return BigDecimal_wrap_struct(obj, vp);
|
||||
|
|
|
@ -1951,6 +1951,10 @@ class TestBigDecimal < Test::Unit::TestCase
|
|||
assert_equal(1, BigDecimal(-1).precision)
|
||||
assert_equal(2, BigDecimal(10).precision)
|
||||
assert_equal(2, BigDecimal(-10).precision)
|
||||
assert_equal(9, BigDecimal(100_000_000).precision)
|
||||
assert_equal(9, BigDecimal(-100_000_000).precision)
|
||||
assert_equal(12, BigDecimal(100_000_000_000).precision)
|
||||
assert_equal(12, BigDecimal(-100_000_000_000).precision)
|
||||
assert_equal(21, BigDecimal(100_000_000_000_000_000_000).precision)
|
||||
assert_equal(21, BigDecimal(-100_000_000_000_000_000_000).precision)
|
||||
assert_equal(103, BigDecimal("111e100").precision)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue