Вывести число с тремя знаками после запятой в С++

Welcome

нужно вывести число с тремя знаками после запятой .
в си это printf("%.3f",num);
как сделать то же самое в с++ с помощью потоков?

yurimedvedev

Вот тебе пример рабочей программы


#include<iomanip.h>
#include<iostream.h>
void main{
float a = 3.1415926;
cout << endl << a;
cout << endl << setprecision(3) << a;
}


Можешь поставить мне пять

gadzet

Только preсision - это как бы точность, которая говорит сколько всего знаков (а не после запятой) - это невсегда удобно.

yurimedvedev

Ты уверен?
У меня на Борланд Си++ 3.1 тот пример выводит число 3.142, то есть 3 - число знаков после запятой.
Может, он работает по-разному под разными платформами?

gadzet

Можно также не подключать iomanip.h, а написать cout.precision(5 например.
Достаточно одного <iostream.h>.
А вот как сделать, чтобы выводилось с определенной точностью после запятой - я не знаю.

gadzet

Абсолютно уверен. Толко что на Visual.C++ проверил.
Может действительно от платформы зависит.

yurimedvedev


//Тогда сначала узнаем, сколько в числе знаков левее запятой
float c=a;
for(int b=0; c>=1; b++){
c/=10;
}
//печатаем
cout << setprecision(b+3) << a;


В таком случае будет напечатано нужное кол-во знаков после запятой, а именно 3.

gadzet

Ну это то понятно. Но ведь я поэтому и сказал в самом начале, что это не очень удобно.
Видишь - лишний код появился.
И с>=1(а не с>1) - это правильнее.

yurimedvedev

Да, ты прав в обоих случаях.

gadzet

У Страуструпа че-то написано про это в 21 главе. Я переписал это. Но ios_base не определяется. Не смог заставить прогу заработать.
Ну ладно, мне надо бежать. Если что-то будет новое по поводу моего последнего поста, пишите.

kliM

по-моему это просто нельзя сделать
попробуй так:


{char buf[10]; sprintf(buf, "%.3f", a); stream << buf;}

Welcome

по-моему, это какое-то извращение

kliM

вполне разумно: если тебе надо поместить число в поток в определенном формате, то можно его сначала перевести в строку, а потом в поток записать эту строку
Оставить комментарий
Имя или ник:
Комментарий: