Эта функция была разработана для некоторых высокоскоростных преобразований без особых накладных расходов. Он проверит переполнение и вернет код ошибки. Однако, если вы хотите знать заранее, сколько символов приведет к конвертации, вы можете использовать
std::numeric_limits<float>::max_digits10
Так ваш код будет выглядеть так:
#include <iostream>
#include <array>
#include <charconv>
int main()
{
std::array<char, std::numeric_limits<float>::max_digits10> str;
float v = 1000000.0 + 1.0 / 3.0;
if (auto [p, ec] = std::to_chars(str.data(), str.data() + str.size(), v);ec == std::errc())
std::cout << std::string_view(str.data(), p - str.data());
}
Вы найдете дополнительная информация здесь и здесь
Обратите внимание: если вы хотите использовать std::string
и его базовый буфер, то вы должны добавить 1 к std::numeric_limits<float>::max_digits10
в функция std::string
resize
. Однако я бы не рекомендовал использовать основной буфер std::string
напрямую.