Fix some conversions
JerryScript CI / Checks (push) Failing after 22s
JerryScript CI / Linux_x86_cpointer-32bit_Build_Correctness_Tests (push) Failing after 14s
JerryScript CI / Linux_x86-64_Build_Option_Tests (push) Failing after 15s
JerryScript CI / Conformance_Tests_ESNext (push) Failing after 10s
JerryScript CI / ASAN_Tests_Debug (push) Failing after 14s
JerryScript CI / UBSAN_Tests (push) Failing after 16s
JerryScript CI / Linux_ARMv7l_Tests (push) Failing after 14s
JerryScript CI / Linux_ARMv7l_Tests_Debug (push) Failing after 15s
JerryScript CI / Linux_AArch64_Tests (push) Failing after 14s
JerryScript CI / Linux_AArch64_Tests_Debug (push) Failing after 15s
JerryScript CI / MbedOS_K64F_Build_Test (push) Failing after 14s
JerryScript CI / ESP8266_RTOS_SDK_Build_Test (push) Failing after 22s
JerryScript CI / ESP_IDF_Build_Test (push) Failing after 1m26s
JerryScript CI / Notification (push) Has been skipped
JerryScript CI / Linux_x86-64_Build_Correctness_Debugger_Tests (push) Failing after 9s
JerryScript CI / Conformance_Tests_ESNext_Debug_A (push) Failing after 10s
JerryScript CI / Conformance_Tests_ESNext_Debug_B (push) Failing after 10s
JerryScript CI / Unit_Tests (push) Failing after 8s
JerryScript CI / Clang_Unit_Build_Option_Tests (push) Failing after 15s
JerryScript CI / ASAN_Tests (push) Failing after 15s
JerryScript CI / Zephyr_STM32F4_Build_Test (push) Failing after 14s
JerryScript CI / NuttX_STM32F4_Build_Test (push) Failing after 14s
JerryScript CI / RIOT_STM32F4_Build_Test (push) Failing after 6s
JerryScript CI / Win_x86-64_Conformance_Tests_ESNext (push) Has been cancelled
JerryScript CI / Win_x86-64_Conformance_Tests_ESNext_Debug (push) Has been cancelled
JerryScript CI / Win_x86-64_Tests-MINGW (push) Has been cancelled
JerryScript CI / Win_x86-64_Tests (push) Has been cancelled
JerryScript CI / Win_x86-64_Tests_Debug (push) Has been cancelled
JerryScript CI / OSX_x86-64_Build_Correctness_Unit_Tests (push) Has been cancelled
JerryScript CI / OSX_x86-64_Build_Correctness_Unit_Tests_Debug (push) Has been cancelled

This commit is contained in:
2026-04-28 21:08:32 -05:00
parent 0ed67e6a53
commit 6c9fe8ab5b
@@ -812,7 +812,48 @@ ecma_number_to_decimal (ecma_number_t num, /**< ecma-number */
JERRY_ASSERT (!ecma_number_is_infinity (num)); JERRY_ASSERT (!ecma_number_is_infinity (num));
JERRY_ASSERT (!ecma_number_is_negative (num)); JERRY_ASSERT (!ecma_number_is_negative (num));
#if JERRY_NUMBER_TYPE_FLOAT64
return ecma_errol0_dtoa ((double) num, out_digits_p, out_decimal_exp_p); return ecma_errol0_dtoa ((double) num, out_digits_p, out_decimal_exp_p);
#else /* !JERRY_NUMBER_TYPE_FLOAT64 */
/* Float32: snprintf with ECMA_NUMBER_MAX_DIGITS significant digits guarantees round-trip.
* Using %e gives "D.DDDDDDDDe±EEE" which we parse into digits + decimal exponent. */
char buf[ECMA_NUMBER_MAX_DIGITS + 16];
snprintf (buf, sizeof (buf), "%.*e", ECMA_NUMBER_MAX_DIGITS - 1, (double) num);
char *p = buf;
lit_utf8_byte_t *out_p = out_digits_p;
int32_t k = 0;
*out_p++ = (lit_utf8_byte_t) *p++; /* first significant digit */
k++;
p++; /* skip '.' */
while (*p != 'e' && *p != 'E')
{
*out_p++ = (lit_utf8_byte_t) *p++;
k++;
}
/* strip trailing zeros */
while (k > 1 && out_digits_p[k - 1] == '0')
{
k--;
}
p++; /* skip 'e' */
int32_t exp_sign = (*p == '-') ? -1 : 1;
p++; /* skip sign */
int32_t exponent = 0;
while (*p)
{
exponent = exponent * 10 + (*p++ - '0');
}
/* decimal exponent convention: n=1 means first digit is units, n=0 means "0.d..." */
*out_decimal_exp_p = exp_sign * exponent + 1;
return (lit_utf8_size_t) k;
#endif /* JERRY_NUMBER_TYPE_FLOAT64 */
} /* ecma_number_to_decimal */ } /* ecma_number_to_decimal */
/** /**