Я получил несколько небольших чисел с плавающей точкой, которые должны быть добавлены к именам файлов. Эти файлы затем будут отображаться на веб-сайте мониторинга. Таким образом, люди могут получить краткое представление об экспериментальном прогоне исключительно по его имени.
Типичное небольшое число (значение вакуумного давления):
1.2528168904794602e-07.
Я надеюсь, что в C / C ++ его можно обрезать до научного числа, такого как
1.3e-07
Этот 1.3e-07 будет частью имени файла.
Я не пытаюсь напечатать значение на экране. В результате использование следующей команды iostream может оказаться невозможным.
std::cout.precision(2);
Какие-либо предложения ? Спасибо !
Используйте комбинацию precision
а также setf
:
Это делает то, что вы хотите:
#include <iostream>
using namespace std;
int main(){
double pressure = 1.2528168904794602e-07;
cout.setf(ios::scientific);
cout.precision(1);
cout << "pressure: " << pressure << endl;
}
Если вы пишете в файл, вы все равно можете использовать precision
:
#include <iostream>
#include <fstream>
using namespace std;
int main(){
double pressure = 1.2528168904794602e-07;
ofstream fout("out.txt");
fout.setf(ios::scientific);
fout.precision(1);
fout << "pressure: " << pressure << endl;
fout.close();
}
Вот пример использования значения для записи выходного файла со значением в качестве части имени файла (используя stringstream
создать имя файла):
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
int main(){
double pressure = 1.2528168904794602e-07;
ostringstream sout;
sout.precision(1);
sout.setf(ios::scientific);
sout << "Prefix" << pressure << ".txt";
ofstream fout(sout.str().c_str());
fout << "Writing to outfile" << endl;
fout.close();
}
Приведенный выше код создает файл с именем Prefix1.3e-07.txt
Что вы можете делать со значением, которое мы не можем использовать precision
?
Спасибо за все сообщения!
Я на самом деле разобрался с помощью поиска.
Вот мое решение:
...
string new_file_name;
stringstream ss (stringstream::in | stringstream::out);
ss << std::setprecision(1) << std::scientific << pressure_value ;
string stest = ss.str();
new_file_name += stest ;
...
Это не совсем то же самое, что мой сценарий, но это эквивалентно.