It is a workaround fix. The problem comes from the inaccuracy of the double rounding.

JerryScript-DCO-1.0-Signed-off-by: Robert Sipka rsipka.uszeged@partner.samsung.com
This commit is contained in:
Robert Sipka
2017-03-16 08:59:48 +01:00
committed by GitHub
parent 202a88bbeb
commit 818c9cd0b0
2 changed files with 13 additions and 2 deletions
@@ -253,10 +253,15 @@ ecma_builtin_number_prototype_object_to_string (ecma_value_t this_arg, /**< this
scale = -scale;
}
int buff_size;
int buff_size = 1;
if (is_scale_negative)
{
buff_size = (int) floor (log (this_arg_number) / log (radix)) + 1;
double counter = this_arg_number;
while (counter > radix)
{
counter /= radix;
buff_size++;
}
}
else
{
@@ -80,6 +80,12 @@ assert((123400).toString(34) === "34pe");
assert((123400).toString(35) === "2upp");
assert((123400).toString(36) === "2n7s");
assert ((1152921504606846600).toString([1,2,3,4].slice(1,2)) === "111111111111111111111111111111111111111111111111111010000000");
assert ((-1152921504606846600).toString(2) === "-111111111111111111111111111111111111111111111111111010000000");
assert ((0x100000000000061).toString(2) === "100000000000000000000000000000000000000000000000001100000")
assert ((-0x100000000000061).toString(16) === "-100000000000060");
assert((123400).toString(new Number(16)) === "1e208");
var digit_chars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9',