2015-07-05 3 views
2

Ниже некоторые простой код, я работаю с:Отсутствующие десятичные при печати

#include <iostream> 
#include <iomanip> 
using namespace std; 

int main() { 
    float f = 1.66f; 
    int d = (int)f; 
    double g = (double)d; 
    cout.precision(6); 
    cout<<g<<"\n"; 
} 

Я хочу, чтобы напечатать 1.000000 но печатает только 1. Но даже после обновления int до double он автоматически не преобразует его в целочисленное значение?

+0

Ну, если вы делаете cout << 1.0000; вы получите то же самое. – coincoin

+1

Easy fix - 'cout << g <<". 000000 \ n ";' –

+0

Это проблема с 'cout'. Будет ли он работать с 'printf''? –

ответ

7

Вы можете добавить cout << std::fixed;

#include <iostream> 
#include <iomanip> 
using namespace std; 

int main() { 
    float f = 1.66f; 
    int d = (int)f; 
    double g = (double)d; 
    cout.precision(6); 
    cout << std::fixed; 
    cout<<g<<"\n"; 
} 

и вы получите 1.000000

Пояснения (редактировать)

При использовании std::fixed:

Когда floatfield установлен в фиксированном, значение с плавающей точкой записывается с использованием фиксированной точкой обозначения: значение представлено с точно таким, как многими цифрами в десятичной части, как указано в поле точности (точность) и нет экспоненциальной части.

При использовании std::defaultfloat (тот, который вы используете):

Когда floatfield установлен в defaultfloat, значение с плавающей точкой написано с использованием обозначения по умолчанию: представление использует как многое значащие цифры по мере необходимости до десятичной точности потока (точность), считая и цифры до и после десятичной точки точка (если есть).

Именно поэтому следующие .000000 считаются неучтенными!
(Если у вас было 1.00001, оно было бы напечатано)

+0

Но это не 'cout.precision()' и 'cout << fixed << setprecision()' не то же самое? –

+0

Невозможно увидеть пример [здесь] (http://www.cplusplus.com/reference/iomanip/setprecision/) результаты разные – coincoin

+0

Я отредактировал и добавил несколько объяснений – coincoin

1

Setprecision устанавливает, насколько точным должен быть результат, например.

std::cout << (1.f)/6 << std::endl; // prints 0.166667 
std::cout.precision(7); 
std::cout << (1.f)/6 << std::endl; // prints 0.1666667 

Но это не требует, чтобы 0 'распечатываются, считаю:

std::cout.precision(5); 
std::cout << 1.1110f << std::endl;  // prints 1.111 
std::cout << 1.1111f << std::endl;  // prints 1.1111 

И как coincoin предлагает решение, чтобы получить 0-х распечатан является использование зОго :: Fixed!

+0

Объясняет проблему, но не отвечает на вопрос – WorldSEnder

+0

Ну.Вопрос был отредактирован. –

+0

Точный вопрос: «не автоматически ли он преобразует его в целочисленное значение», довольно бессмысленно, если вы спросите меня. Поэтому вы должны попытаться решить проблему. – WorldSEnder

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