FMT_FUNC void grisu2_prettify()

in src/main/cpp/sdk/common/spdlog/fmt/bundled/format-inl.h [619:657]


FMT_FUNC void grisu2_prettify(const gen_digits_params &params,
                              int size, int exp, Handler &&handler) {
  if (!params.fixed) {
    // Insert a decimal point after the first digit and add an exponent.
    handler.insert(1, '.');
    exp += size - 1;
    if (size < params.num_digits)
      handler.append(params.num_digits - size, '0');
    handler.append(params.upper ? 'E' : 'e');
    write_exponent(exp, handler);
    return;
  }
  // pow(10, full_exp - 1) <= v <= pow(10, full_exp).
  int full_exp = size + exp;
  const int exp_threshold = 21;
  if (size <= full_exp && full_exp <= exp_threshold) {
    // 1234e7 -> 12340000000[.0+]
    handler.append(full_exp - size, '0');
    int num_zeros = params.num_digits - full_exp;
    if (num_zeros > 0 && params.trailing_zeros) {
      handler.append('.');
      handler.append(num_zeros, '0');
    }
  } else if (full_exp > 0) {
    // 1234e-2 -> 12.34[0+]
    handler.insert(full_exp, '.');
    if (!params.trailing_zeros) {
      // Remove trailing zeros.
      handler.remove_trailing('0');
    } else if (params.num_digits > size) {
      // Add trailing zeros.
      ptrdiff_t num_zeros = params.num_digits - size;
      handler.append(num_zeros, '0');
    }
  } else {
    // 1234e-6 -> 0.001234
    handler.insert(0, 2 - full_exp, fill{to_unsigned(-full_exp)});
  }
}