2012-02-21 2 views
1

хорошо в принципе, если я пишу что-то вроде этого -Удалить точность от разрыва

float a = 0; 
a = (float) 1/5; 
a += (float) 1/9; 
a += (float) 1/100; 

Он автоматически decrase точности до 2 знаков после запятой, но мне нужно иметь 5 знаков после запятой, это доступно для создания, поэтому он отображает 5 цифр? С setprecision (5) он просто показывает 00000 после запятой.

Это все данные из входного файла просто отлично.

+0

Когда вы вызываете 'setPrecision()'? – talnicolas

+0

перед всеми расчетами – user1223540

+0

См. Ответ триклозана. – talnicolas

ответ

0

это даст 5 цифр после запятой:

#include <iostream> 
#include <iomanip> 

using namespace std; 

int main(int argi, char** argc) { 
     float a = 0; 
     a = (float) 1/5; 
     a += (float) 1/9; 
     a += (float) 1/100; 

     cout << setprecision(5) << a << endl; 
     return 0; 
} 

, если вы хотите всегда иметь 5 цифр на выходе, может использовать это:

cout << setprecision(5) << setfill ('0')<< setw(5) << a << endl; 
+0

он выдает только 2 цифры после запятой – user1223540

+1

http://ideone.com/Mpk96 - распечатывает 5 цифр – marcinj

+0

Проверить код в главном сообщении, который не работает. – user1223540

4

setprecision не изменяйте значение. Это только на дисплее желаемой точности при использовании ofstream

1

Вы должны использовать setprecision так:

cout << setprecision (5) << a << endl; 

http://www.cplusplus.com/reference/iostream/manipulators/setprecision/

EDIT: Я не использовал C++ в то время, но у вас могут возникнуть проблемы, потому что вы делаете integer деление, а затем лидируете результат на float. Попробуйте сделать это, как это вместо того, чтобы заставить float деление:

a+=1.0f/100; 
+0

Yup, это все равно то же самое – user1223540

+0

So ваше окончательное значение вывода для 'a' равно' 0,00000'? – Rondel

+0

Да, это то же самое. – user1223540

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