Преобразование float в строку с заданной точностью и количеством десятичных цифр?
Как преобразовать float в строку в C++ при указании точности и количества десятичных цифр?
например: 3.14159265359 -> "3.14"
4 ответа:
#include <iomanip> // setprecision #include <sstream> // stringstream double pi = 3.14159265359; stringstream stream; stream << fixed << setprecision(2) << pi; string s = stream.str();
посмотреть основные
используйте фиксированную нотацию с плавающей запятой
задает флаг str поток
fixed
., когда
floatfield
установлено значениеfixed
, значения с плавающей запятой записываются с использованием фиксированной точки нотации: значение представлено ровно столько цифр в десятичной части, как указано точности поле (precision
) и без экспонентная часть.и setprecision.
обычный метод для выполнения такого рода вещей - это "печать в строку". В C++ это означает использование
std::stringstream
что-то типа:std::stringstream ss; ss << std::fixed << std::setprecision(2) << number; std::string mystring = ss.str();
здесь я предоставляю отрицательный пример, где вы хотите избежать при преобразовании плавающего числа в строки.
float num=99.463; float tmp1=round(num*1000); float tmp2=tmp1/1000; cout << tmp1 << " " << tmp2 << " " << to_string(tmp2) << endl;
вы получаете
99463 99.463 99.462997
Примечание: переменная num может быть любым значением, близким к 99.463, вы получите ту же распечатку. Дело в том, чтобы избежать удобной функции c++11 "to_string". Мне потребовалось время, чтобы выбраться из этой ловушки. Лучший способ-это методы stringstream и sprintf (язык C). В C++11 или более поздней версии должны предоставляться второго параметра как количество цифр после плавающей точки, чтобы показать. Сейчас по умолчанию-6. Я утверждаю это так, чтобы у других не было времени на эту тему.
Я написал свою первую версию, пожалуйста, дайте мне знать, если вы обнаружили ошибку, которую необходимо исправить. Вы можете контролировать точное поведение с помощью иоманипулятора. Моя функция предназначена для отображения количества цифр после десятичной точки.
string ftos(float f, int nd) { ostringstream ostr; int tens = stoi("1" + string(nd, '0')); ostr << round(f*tens)/tens; return ostr.str(); }