2010-03-18 3 views
3

Я хочу напечатать числа в файл, используя stl с числом десятичных знаков, а не общей точностью.Как изменить точность печати с помощью stl?

Так что, если я это сделать:

int precision = 16; 
std::vector<double> thePoint(3); 
thePoint[0] = 86.3671436; 
thePoint[1] = -334.8866574; 
thePoint[2] = 24.2814; 
ofstream file1(tempFileName, ios::trunc); 
file1 << std::setprecision(precision) 
    << thePoint[0] << "\\" 
    << thePoint[1] << "\\" 
    << thePoint[2] << "\\"; 

я получить номера, как это:

86.36714359999999\-334.8866574\24.28140258789063 

То, что я хочу это:

86.37\-334.89\24.28 

Другими словами, усечение в двух десятичных точках. Если я установил точность 4, то я получу

86.37\-334.9\24.28 

т. Е. Второе число неправильно усечено.

Я не хочу манипулировать каждым числом явно, чтобы получить усечение, тем более, что я, кажется, получаю случайные 9 повторений или 0000000001 или что-то подобное, что осталось.

Я уверен, что есть что-то очевидное, например, использование printf (%. 2f) или что-то в этом роде, но я не уверен, как смешивать это с stl < < и с потоком.

ответ

7

Используйте std :: fixed, это должно сработать для вас.

file1 << std::fixed << std::setprecision(precision) 
    << thePoint[0] << "\\" 
    << thePoint[1] << "\\" 
    << thePoint[2] << "\\"; 
+0

Вот и все, спасибо! – mmr

2

Попробуйте

file1 << std::setiosflags(ios::fixed) << std::setprecision(precision) 

который устанавливает формат с фиксированной точкой, а не с плавающей точкой.

(Кстати, это не STL. Это iostream.)

... О! Я думаю, что Кумар улучшил меня с std::fixed.

+0

Как это не STL? iostream является одной из стандартных библиотек шаблонов .... – SoapBox

+0

Просто потому, что что-то использует шаблоны, не делает его STL. Следуйте ссылкам, и вы обнаружите, что они радикально отличаются друг от друга. –

Смежные вопросы