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!