усечение — C / C ++, усечение небольшого числа с плавающей точкой до двух значащих цифр и научное выражение

Я получил несколько небольших чисел с плавающей точкой, которые должны быть добавлены к именам файлов. Эти файлы затем будут отображаться на веб-сайте мониторинга. Таким образом, люди могут получить краткое представление об экспериментальном прогоне исключительно по его имени.
Типичное небольшое число (значение вакуумного давления):

1.2528168904794602e-07.

Я надеюсь, что в C / C ++ его можно обрезать до научного числа, такого как

1.3e-07

Этот 1.3e-07 будет частью имени файла.

Я не пытаюсь напечатать значение на экране. В результате использование следующей команды iostream может оказаться невозможным.

std::cout.precision(2);

Какие-либо предложения ? Спасибо !

3

Решение

Используйте комбинацию 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?

2

Другие решения

Спасибо за все сообщения!
Я на самом деле разобрался с помощью поиска.

Вот мое решение:

...
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 ;
...

Это не совсем то же самое, что мой сценарий, но это эквивалентно.

0

По вопросам рекламы [email protected]