Establezca la precisión con fstream en el archivo de salida - formato doble

No puedo encontrar una respuesta sobre cómo podría usar un fstream ya abierto para generar dobles formateados en un archivo de texto. Actualmente mi código está haciendo esto:

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;

   }
}

Donde p es struct llamada product_record y price, tax, sANDh y total son todosdobles&nbsp;He intentado hacerf << setprecision(4) << p.price << endl;&nbsp;Pero esto no funciona. ¿Cómo puedo formatear este doble para tener una precisión de dos decimales? Me gusta esto"#.00". ¿Cómo puedo lograr esto usando específicamente fstream?

Además, para su información, la tarea general es simplemente leer un archivo txt, almacenar datos en una estructura, agregar estructuras a un vector y luego leer desde las estructuras para imprimir en un archivo de salida. El archivo de entrada ya tiene los dobles formateados como 10.00, 2.00 y similares (2 lugares decimales)