std::ofstream 设置浮点格式的精度

std::ofstream set precision for Floating point format

我需要将 6 位精度的浮点类型写入文件。 此代码无法正常工作,如我所料:

int main() {

    std::ofstream ofs("1.txt", std::ofstream::out);
    if (ofs.is_open() == false) {
        std::cerr << "Couldn't open file... 1.txt" << std::endl;
        return -1;
    }

    time_t t_start, t_end;
    time(&t_start);
    sleep(1);
    time(&t_end);
    float elapsed = difftime(t_end, t_start);   
    ofs<<"Elapsed time= " << std::setprecision(6) <<elapsed<< "(s)"<<std::endl;        
    ofs.close();
    return 0;
}

输出:

Elapsed time= 1(s)

有什么建议吗?

你必须使用 std::fixed and std::setprecision:

ofs << "Elapsed time= " << std::fixed << std::setprecision(6)
    << elapsed << "(s)"
    << std::endl;

进一步 difftime() returns double 而不是 float。

double difftime(time_t time1, time_t time0);

The difftime() function returns the number of seconds elapsed between time time1 and time time0, represented as a double.

如果需要 0.000000,您需要将 std::fixed 插入流中,按照以下行:

ofs << "Elapsed time = "
    << std::setprecision(6) << std::fixed << elapsed << " (s)"
    << std::endl;

这给你:

Elapsed time = 0.000000 (s)