Desidero stampare un valore doppio su std::cout
portabile (GCC, clang, MSVC++) in modo che l'output sia lo stesso su tutte le piattaforme.Stampa portatile di esponente di un doppio in iostreams C++
Ho un problema con la formattazione dell'esponente. Il seguente programma
#include <iostream>
int main()
{
std::cout << 0.1e-7 << std::endl;
return 0;
}
ha questa uscita con GCC:
1e-08
e la successiva uscita con MSVC
1e-008
Come posso fare entrambe le uscite lo stesso?
Mi dispiace se questa è una domanda stupida ma non ho ancora trovato una risposta. Tutta la formattazione sembra evolvere intorno alla formattazione del tutto prima della mantissa ...
EDIT: L'uscita del GCC è 1e-08
non 1e-8
(come inizialmente indicato) in modo che è conforme. Dispiace per la confusione.
EDIT2: in realtà ribattezzato "mantissa" in "esponente" a seguito del commento di Dietmar. There also is a section on Wikipedia on mantissa vs. significant.
Hai guardato [manipolatori] (http://www.cplusplus.com/reference/iostream/manipulators/)? – razlebe
@razlebe: Non sono riuscito a trovare una risposta usando i manipolatori. – Manuel
Trovo che GCC sia incoerente perché stampa '1.e-08' e' 1.e-18' (due cifre) eppure stampa '1.e-256' (tre cifre). Non sono riuscito a trovare una libreria di stream che risolva questo problema (ho provato con iostream ovviamente e Boost.Format). Quindi, se si desidera avere una larghezza fissa doppia, è necessario prenotare e aggiungere spazio per l'eventuale terza cifra dell'esponente. – alfC