Как использовать функцию std :: to_string для форматирования float как «x.0» - PullRequest
0 голосов
/ 20 января 2020

Я использую функцию std :: to_string для преобразования числа с плавающей точкой в ​​строку.

 float number = 30.0f;  // this number will vary

когда я конвертирую число с плавающей точкой в ​​строку

 std::to_string(number);

, std :: cout показывает результат 30,000000

я хочу получить результат 30,0 и удалить лишние нули.

Ответы [ 2 ]

3 голосов
/ 20 января 2020

std::to_string не поддерживает это, и фактически вообще не подходит для произвольных значений с плавающей запятой.

Поскольку ваш вопрос помечен , я знаю о двух способах. Во-первых, у вас есть std::stringstream, который является типобезопасным и будет работать с произвольными типами:

#include <sstream>

// ...

float number = 30.0f;

std::ostringstream oss;
oss << std::setprecision(1) << number;
std::string result = oss.str();

В качестве альтернативы, у вас есть std::snprintf, который требует преобразования через char буфер заданного размера:

float number = 30.0f;

char buffer[20];  // maximum expected length of the float
std::snprintf(buffer, 20, "%.1f", number);
std::string str(buffer);

Из C ++ 17 вы можете использовать std::to_chars вместо аналогично std::snprintf, а из C ++ 20 вы можете используйте std::format.

1 голос
/ 20 января 2020

Согласно документации

С типами с плавающей запятой std::to_string может привести к неожиданным результатам, так как число значащих цифр в возвращаемой строке может быть равно нулю

Однако Вы можете установить точность, как указано в этом Точность std :: to_string (double)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...