If v is in the range [10^min_exp, 10^max_exp) it will be printed in fixed-point notation. Otherwise it will be printed in exponential notation.
16469{
16470 JSON_ASSERT(min_exp < 0);
16471 JSON_ASSERT(max_exp > 0);
16472 const int k = len;
16473 const int n = len + decimal_exponent;
16474
16475
16476
16477
16478
16479 if (k <= n && n <= max_exp)
16480 {
16481
16482
16483 std::memset(buf + k, '0', static_cast<size_t>(n) - static_cast<size_t>(k));
16484
16485 buf[n + 0] = '.';
16486 buf[n + 1] = '0';
16487 return buf + (static_cast<size_t>(n) + 2);
16488 }
16489
16490 if (0 < n && n <= max_exp)
16491 {
16492
16493
16494 JSON_ASSERT(k > n);
16495 std::memmove(buf + (static_cast<size_t>(n) + 1), buf + n, static_cast<size_t>(k) - static_cast<size_t>(n));
16496 buf[n] = '.';
16497 return buf + (static_cast<size_t>(k) + 1U);
16498 }
16499
16500 if (min_exp < n && n <= 0)
16501 {
16502
16503
16504 std::memmove(buf + (2 + static_cast<size_t>(-n)), buf, static_cast<size_t>(k));
16505 buf[0] = '0';
16506 buf[1] = '.';
16507 std::memset(buf + 2, '0', static_cast<size_t>(-n));
16508 return buf + (2U + static_cast<size_t>(-n) + static_cast<size_t>(k));
16509 }
16510
16511 if (k == 1)
16512 {
16513
16514
16515 buf += 1;
16516 }
16517
16518 else
16519 {
16520
16521
16522 std::memmove(buf + 2, buf + 1, static_cast<size_t>(k) - 1);
16523 buf[1] = '.';
16524 buf += 1 + static_cast<size_t>(k);
16525 }
16526
16527 *buf++ = 'e';
16529}
JSON_HEDLEY_RETURNS_NON_NULL char * append_exponent(char *buf, int e)
appends a decimal representation of e to buf