Ich glaube nicht, dass dies mit herkömmlichen Manipulatoren möglich ist. (wenn es ist, würde ich gerne korrigiert werden und lernen, wie)
Die einzige verbleibende Möglichkeit besteht darin, selbst einen Streambuf zu erstellen und alle Exponenten-Zahlen abzufangen, die an den Stream gehen, sie von Hand umzuformatieren und an den zugrunde liegenden Stream weiterzuleiten.
Das scheint eine Menge Arbeit zu sein, und obwohl es keine Raketenwissenschaft ist, ist es auch keine triviale Aufgabe.
Zur Frage nach dem "Warum": Ich weiß, dass Linux den Exponenten mit mindestens zwei Ziffern definiert, ich nehme an, dass Windows ihn mit mindestens drei Ziffern spezifiziert?
// on linux
std::cout << std::scientific << 1.23e4 << std::endl
Außerdem wird eine führende Null hinzugefügt:
1.230000e+04