Mam problem z przekonwertowaniem ciągu znaków na podwójne. Dostaję ciąg z długimi współrzędnymi w formacie 33.9425/N 118.4081/W
Konwertowanie ciągu na podwójne - utrata precyzji
Najpierw dwukrotnie wywołuję moją funkcję trimLastChar(std::string& input)
, co spowoduje usunięcie znaków Północ, Południe, Wschód, Zachód, a następnie ukośnik. Ta funkcja poprawnie zwraca 33.9425
i 118.4081
z szacunkiem jako std::string
.
Korzystam z następującego kodu, aby przekonwertować mój std::string
na double
... jednak problem polega na precyzji strat konwersji - podejrzewam, że zostanie zaokrąglona ?.
// Location In String is what trimLastChar returns
std::stringstream stream(locationInString);
std::cout << "DEBUG: before: " << locationInString << " ";
// output is a double* output = new double passed by reference to my function
stream >> output;
std::cout << output << std::endl;
Wyjście w tym przypadku będzie produkować:
33.9425
118.408
Jak można zauważyć, prawidłowa wartość powinna być 118.4081
ale 1 brakuje ...
Jakieś pomysły jak to naprawić? A co ważniejsze, dlaczego tak się dzieje?
... należy sprawdzić format wyjściowy, to myślę, że jest to tylko problem formatowania na cout. – IdeaHat