2014-01-04 4 views
-3

У меня есть C++ проблема:C++ печать странно ведут себя

#include<iostream> 
#include<stdio.h> 

using namespace std; 

int main() { 
    double k = 1.2366; 
    cout << printf("%.3lf\n", k); 
} 

выход является:

1.237 
6 

, но я ожидаю:

1.237 

почему я получаю эту дополнительную 6 в вторая строка?

+5

потому что printf возвращает 6 – OmnipotentEntity

+1

Обычно вы не хотите использовать 'cout' * и *' printf' на одной строке. Выбери один. В этом случае, поскольку вам кажется, что требуется числовое форматирование, просто удалите 'cout <<' из этой строки, и он должен работать. Кроме того, удалите часть 'printf' и вставьте заголовок iomanip. – Mark

ответ

5

Ну, вы сначала вызываете printf, который распечатывает номер, а затем передает результат printf (количество напечатанных символов) на cout.

+0

Как я могу избежать этого, а также напечатать 1.237 в результате – user2919973

+1

Используйте 'printf ("%. 3f ", k)' самостоятельно или включите '' и используйте' cout << fixed << setprecision (3) < Alex

+1

Ну, да, придерживайтесь одного метода. Либо используйте 'printf', либо используйте' iomanip', как @AlexYan. –

4

Это потому, что printf возвращает количество печатных символов. Чтобы получить код право, просто использовать std::cout непосредственно с требуемой точностью:

std::cout << fixed << setprecision(3); 
std::cout << k << "\n"; 

Если вы хотите, чтобы округлить результаты, прочитать How do you round off decimal places in C++?, который указывает вам, например, этаж/CEIL/круглый. Но будьте осторожны, чтобы не округлить само значение, если вы снова используете его.

+0

cout << k; очевидно печатает 1.2366, по моему вопросу я хотел распечатать 1.237 – user2919973

+0

Сделал редактирование, чтобы позаботиться о точности. –

+0

Я попытался сделать setpercision(), но это не округляет число, которое мне нужно вернуть округленное число до третьего символа после плавающей запятой – user2919973

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