2016-03-29 2 views
1

У меня проблема, когда мне нужно напечатать некоторое двойное значение, используя базовую систему вывода C++ (например, iostream или sstream), и это значение как-то сильно усекается. Например:Выход с двойными номерами усекается

double a = 283752.24234; 
    std::cout << 283752.24234 << std::endl; 
    std::cout << a << std::endl; 

Оба из выходов будет 283752

Почему это происходит и что я могу сделать, чтобы получить полный выход любого двойного значения?

+0

Это не проблема, но не используйте 'зЬй :: endl', если вы не нужны дополнительные вещи, которые он делает. '' \ n'' заканчивает линию. –

+2

@PeteBecker 'flush()' на самом деле может понадобиться для этого примера. Не путайте ОП. –

+0

@ πάνταῥεῖ - Я этого не вижу. Это обычный выход. 'flush()' бессмысленно. –

ответ

2

Почему это происходит ...

Это потому, что default precision является 6 и, таким образом, только передовые 6 цифр визуализируются 283752.

... и что я могу сделать, чтобы получить полную информацию о любом двойном значении?

  1. Первый вариант заключается в использовании большего precision значение с помощью манипулятора std::setprecision() I/O:

    #include <iostream> 
    #include <iomanip> 
    
    int main(){ 
        double a = 283752.24234; 
    
        std::cout << std::setprecision(12) << 283752.24234 << std::endl; 
        std::cout << std::setprecision(12) << a << std::endl; 
    } 
    

    См Live Demo

  2. Второй вариант заключается в использовании std::fixed I/O манипулятор для отображения значений после десятичной точки:

    #include <iostream> 
    #include <iomanip> 
    
    int main(){ 
        double a = 283752.24234; 
    
        std::cout << std::fixed << 283752.24234 << std::endl; 
        std::cout << std::fixed << a << std::endl; 
    } 
    

    См Live Demo

Выход:

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