Definir precisão com fstream para o arquivo de saída - formato duplo

Não consigo encontrar uma resposta sobre como usar um fstream já aberto para gerar dobras formatadas em um arquivo de texto. Atualmente, meu código está fazendo isso:

int writeToFile (fstream& f, product_record& p)
{
   if (!f){
      cout << "out file failed!!error" << endl;
      return -1;
   } else {

      f << p.idnumber << endl;
      f << p.name << endl;
      f << p.price << endl;
      f << p.number << endl;
      f << p.tax << endl;
      f << p.sANDh << endl;
      f << p.total << endl;
      f << intArrToString( p.stations ) << endl;

   }
}

Onde p é struct chamada product_record e price, tax, sANDh e total são todosdobra&nbsp;Eu tentei fazerf << setprecision(4) << p.price << endl;&nbsp;mas isso não funciona. Como posso formatar esse duplo para ter uma precisão de duas casas decimais. Como isso"#.00". Como posso conseguir isso usando especificamente o fstream?

Além disso, a tarefa geral é simplesmente ler um arquivo txt, armazenar dados em uma estrutura, adicionar estruturas a um vetor e depois ler as estruturas para imprimir em um arquivo de saída. O arquivo de entrada já possui as duplas formatadas como 10.00, 2.00 e outras (duas casas decimais)