2017-08-10 3 views
0

Je dois écrire le type float avec une précision de 6 chiffres dans le fichier. Ce code ne fonctionne pas correctement comme je m'y attendais:Précision de l'ensemble C++ pour le format à virgule flottante pour std :: ofstream

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; 
} 

Sortie:

Elapsed time= 1(s) 

toute suggestion?

Répondre

1

Vous devez utiliser std::fixed et std::setprecision:

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

D'autres difftime() rendements double pas un flotteur.

double difftime(time_t time1, time_t time0);

La fonction difftime() renvoie le nombre de secondes écoulées entre le temps time1 et le temps TIME0, représentée par un double-.

1

Vous devez insérer std::fixed dans le flux si vous voulez 0.000000, le long des lignes de:

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

Cela vous donne:

Elapsed time = 0.000000 (s)