Tôi gặp sự cố khi chuyển đổi chuỗi thành gấp đôi. Tôi được cung cấp một chuỗi có toạ độ vĩ độ/kinh độ dài theo định dạng 33.9425/N 118.4081/W
Chuyển đổi chuỗi thành đôi - mất chính xác
Lần đầu tiên tôi gọi hàm của tôi là trimLastChar(std::string& input)
hai lần, sẽ xóa ký tự Bắc, Nam, Đông, Tây và sau đó cắt gạch chéo. Hàm này trả về chính xác 33.9425
và 118.4081
một cách tôn trọng dưới dạng std::string
.
Tôi đang sử dụng mã sau để chuyển đổi std::string
thành số double
... tuy nhiên vấn đề là, độ chính xác mất mát chuyển đổi - Tôi nghi ngờ nó được làm tròn ?.
// 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;
Sản lượng trong trường hợp này sẽ tạo ra:
33.9425
118.408
Như bạn thấy, giá trị chính xác nên được 118.4081
nhưng 1 là mất tích ...
Bất kỳ ý tưởng làm thế nào để khắc phục? Hay quan trọng hơn, tại sao điều này lại xảy ra?
... bạn nên kiểm tra định dạng đầu ra của bạn, tôi đoán đây chỉ là một vấn đề định dạng trên cout. – IdeaHat