Я пытаюсь получить данные двойного типа из базы данных как документация говорит:
auto cursor = db["collection"].find({}, opts);
for (auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
Но я хочу избежать преобразования документа в JSON, потому что я потерял десятичную точность. Например:
В базе данных показано это:
"lng" : -58.4682568037741
Но после преобразования в JSON я получаю это:
"lng" : -58.4682
Есть ли способ преобразовать его, например, в строку?
Вы можете вытащить поле, которое вы хотите прямо как двойной. Чтобы напечатать высокоточный вывод, вам необходимо установить его в выходном потоке. Например.
for (auto&& doc : cursor) {
std::cout << std::setprecision(15)
<< "lng: " << doc["lng"].get_double() << std::endl;
}
дает:
lng: -58.4682568037741
Вы можете проверить это doc["lng"]
BSON дважды перед вызовом get_double
,
Других решений пока нет …