When I'm using bsoncxx::to_json function to convert prepared bsoncxx document to json all float/double values are truncated to 5 digits precision. Please check following code:
#include <iostream> #include <bsoncxx/json.hpp> #include <bsoncxx/builder/basic/array.hpp> #include <bsoncxx/builder/stream/document.hpp> #include <bsoncxx/builder/basic/document.hpp> using namespace bsoncxx; using namespace std; using bsoncxx::builder::basic::kvp; using bsoncxx::builder::basic::document; int main(void) { bsoncxx::builder::stream::document d1; bsoncxx::builder::basic::document d2; cout.precision(17); double v1=1.0123456789; double v2=9.8765432111; d1<<"T1"<<v1; cout<<bsoncxx::to_json(d1.view())<<endl; d2.append(kvp("T2", types::b_double{v2})); cout<<bsoncxx::to_json(d2.view())<<endl; cout<<"V1: "<<v1<<endl; cout<<"V2: "<<v2<<endl; cout<<"T1: "<<d1.view()["T1"].get_double()<<endl; cout<<"T2: "<<d2.view()["T2"].get_double()<<endl; }
Sample output:
{ "T1" : 1.01235 } { "T2" : 9.87654 } V1: 1.0123456789 V2: 9.8765432110999996 T1: 1.0123456789 T2: 9.8765432110999996
I'm expecting following output from to_json call:
{ "T1" : 1.0123456789 } { "T2" : 9.8765432110999996 }
How to fix this issue?
libbsoncxx -> 3.0.1 libbson -> 1.9.2
Thank you!