3

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!

0 Answers0