2016-03-29 9 views
1

基本的なC++出力システム(iostreamやsstreamなど)を使っていくつかの倍精度値を出力する必要があり、この値が何とか切り捨てられてしまうという問題があります。たとえば :二重出力が切り捨てられる

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

出力の両方が、なぜこれが283752

起こっていることだろうと私はすべてのdouble値の完全な出力を得るために何ができるのでしょうか?この出来事はなぜ

+0

これは問題ではありませんが、しかし、あなたはそれがないという余分なものを必要としない限り、 'のstd :: endl'を使用しないでください。 '' \ n ''は行を終わらせます。 –

+2

@PeteBecker 'flush()'がこの例では実際に必要になるかもしれません。 OPを混乱させないでください。 –

+0

@πάνταῥεῖ - 私はそれを見ない。それは日常的な出力です。 'flush()'は無意味です。 –

答えて

2

... default precisionは6であり、したがって、唯一の一番の6桁は283752をレンダリングしているためだ

...そして、二重の値の完全な出力を得るにはどうすればよいですか?

  1. 最初のオプションはstd::setprecision() I/Oマニピュレータを使用して、より大きなprecision値を使用することです:

    #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 
関連する問題