Chcę wydrukować podwójną wartość do std::cout
przenośnie (GCC, clang, MSVC++) w taki sposób, że wynik jest taki sam na wszystkich platformach.Przenośne drukowanie wykładnika podwójnego do C++ iostreams
Mam problem z formatowaniem wykładnika. Poniższy program
#include <iostream>
int main()
{
std::cout << 0.1e-7 << std::endl;
return 0;
}
Ma to wyjście z GCC:
1e-08
oraz następujące dane wyjściowe z MSVC
1e-008
Jak mogę zrobić oba wyjścia są takie same?
Przykro mi, jeśli to głupie pytanie, ale nie znalazłem dotąd odpowiedzi. Wszystko formatowanie wydaje się rozwijać wokół formatowania wszystko przed mantysa ...
EDIT: Wyjście z GCC jest 1e-08
nie 1e-8
(jak pierwotnie podano), więc jest zgodne. Przepraszam za zamieszanie.
EDIT2: Właściwie zmieniono nazwę "mantysa" na "wykładnik" po uwadze Dietmara. There also is a section on Wikipedia on mantissa vs. significant.
Pan spojrzał na [manipulatorów] (http://www.cplusplus.com/reference/iostream/manipulators/)? – razlebe
@razlebe: Nie mogłem znaleźć odpowiedzi używając manipulatorów. – Manuel
Uważam, że GCC jest niekonsekwentny, ponieważ wypisuje '1.e-08' i' 1.e-18' (dwie cyfry), a mimo to wypisuje '1.e-256' (trzy cyfry). Nie mogłem znaleźć biblioteki strumieniowej, która rozwiązuje to (próbowałem oczywiście za pomocą iostream i Boost.Format). Więc jeśli ktoś chce mieć ustalone podwójne szerokości, to musi zarezerwować i dodatkowe miejsce dla trzeciej cyfry wykładnika. – alfC