双倍到 std::cout 截断数据

double to std::cout truncates data

本文关键字:数据 cout std      更新时间:2023-10-16
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

它会截断小数点后的值。

如何获得正确的值?

您按

预期在number中具有正确的值。问题是您应该通过以下方式cout打印它:

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

输出

155555.2587

正如 Alan Stokes 所说,默认情况配置为打印具有 6 个十进制数字的浮点值。您可以通过流操纵器修改此行为,例如std::setprecision()

int main()
{
    float pi = 3.141592654;
    std::cout << std::fixed << std::setprecision( 4 ) << pi << std::endl;
}

上面的代码打印:

3,1416