double to std :: cout截断数据

时间:2013-11-14 08:41:23

标签: c++ string double cout

int main(){
    std::string text = "15555555.2587";
    std::stringstream ss;
    double number;
    ss << text;
    ss >> number;
    std::cout << std::fixed << std::setw( 11 ) << std::setprecision( 6 ) 
      << std::setfill( '0' ) << number<<endl;

    return 0;
}

上述程序的输出为15555555.0000

它会截断小数点后的值。

如何获得正确的值?

2 个答案:

答案 0 :(得分:3)

number符合预期的正确价值。问题是你应该用cout以这种方式打印它:

std::cout << std::fixed << std::setprecision(4) << number;

输出

155555.2587

答案 1 :(得分:1)

正如Alan Stokes所说,流被配置为默认打印带有6位十进制数的浮点值。您可以通过std::setprecision()之类的流操纵器修改此行为:

int main()
{
    float pi = 3.141592654;

    std::cout << std::fixed << std::setprecision( 4 ) << pi << std::endl;
}

上面的代码打印:

  

3,1416