双数字输出被截断

时间:2016-03-29 21:59:18

标签: c++ double output

我有一个问题,我需要使用基本的C ++输出系统(例如iostream或sstream)打印一些双值,并且这个值以某种方式被截断了很多。 例如:

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

两个输出都是283752

为什么会发生这种情况,我该怎么做才能获得任何双值的完整输出?

1 个答案:

答案 0 :(得分: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

  3. 输出:

    283752.242340
    283752.242340