生活随笔
收集整理的這篇文章主要介紹了
rapidJson输出时 保留小数位
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
pretty_writer.SetMaxDecimalPlaces(4);
這個真好用,它使用gresu, 盡可能給你處理最接近的精度,并按要求輸出小數位。
#include <string>
#include <fstream>
#include <iostream>#include <QMessageBox>
#include <QString>#include "rapidjson/document.h"
#include "rapidjson/filereadstream.h"
#include "rapidjson/filewritestream.h"
#include "rapidjson/prettywriter.h"
#include "rapidjson/stringbuffer.h"#include "ui_widget.h"
#include "widget.h"using namespace std;
using namespace rapidjson;Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}void json_write();
void json_read();void Widget::on_pushButton_clicked()
{//寫、讀 測試json_write();json_read();
}float prec(double d, int pre = 2)
{QString s = QString::number(d, 'g', pre);return s.toFloat();
}
#undef prec
#define prec//寫json文件
void json_write()
{Document doc;doc.SetObject();Document::AllocatorType &allocator=doc.GetAllocator(); //獲取分配器//1.添加字符串對象doc.AddMember("author","tashaxing",allocator);//2.添加數組對象Value array1(kArrayType);for(int i=0;i<3;i++){Value int_object(kObjectType);int_object.SetInt(i);array1.PushBack(int_object,allocator);}doc.AddMember("number",array1,allocator);//3.添加復合對象Value object(kObjectType);object.AddMember("language1","C++",allocator);object.AddMember("language2","java",allocator);doc.AddMember("language",object,allocator);//4.添加對象數組和復合對象的組合Value array2(kArrayType);Value object1(kObjectType);object1.AddMember("hobby","drawing",allocator);array2.PushBack(object1,allocator);Value object2(kObjectType);object2.AddMember("height",prec(-12941.71999999999993),allocator);array2.PushBack(object2,allocator);doc.AddMember("information",array2,allocator);StringBuffer buffer;PrettyWriter<StringBuffer> pretty_writer(buffer); //PrettyWriter是格式化的json,如果是Writer則是換行空格壓縮后的jsonpretty_writer.SetMaxDecimalPlaces(4);doc.Accept(pretty_writer);//打印到屏幕cout<<"the json output:"<<endl;cout<<buffer.GetString()<<endl;//輸出到文件ofstream fout;fout.open("test"); //可以使絕對和相對路徑,用\\隔開目錄,test, test.json, test.txt 都行,不局限于文件格式后綴,只要是文本文檔fout<<buffer.GetString();fout.close();
}//讀json文件
void json_read()
{cout<<"the json read:"<<endl;ifstream fin;fin.open("test");string str;string str_in="";while(getline(fin,str)) //一行一行地讀到字符串str_in中{str_in=str_in+str+'\n';}//解析并打印出來Document document;document.Parse<0>(str_in.c_str());Value &node1=document["author"];cout<<"author: "<<node1.GetString()<<endl;Value &node2=document["number"];cout<<"number: "<<endl;if(node2.IsArray()){for(int i=0;i<node2.Size();i++)cout<<'\t'<<node2[i].GetInt()<<endl;}Value &node3=document["language"];cout<<"language: "<<endl;Value &tmp=node3["language1"];cout<<'\t'<<"language1: "<<tmp.GetString()<<endl;tmp=node3["language2"];cout<<'\t'<<"language2: "<<tmp.GetString()<<endl;Value &node4=document["information"];cout<<"information: "<<endl;if(node4.IsArray()){int i=0;Value &data=node4[i]; //注意,此處下表索引只能用變量,不能用常量,例如node[0]編譯錯誤cout<<'\t'<<"hobby: "<<data["hobby"].GetString()<<endl;i=1;data=node4[i];cout<<'\t'<<"height: "<<data["height"].GetDouble()<<endl;}}
d參考:
https://gmplib.org/
https://www.cnblogs.com/miloyip/p/4610111.html
總結
以上是生活随笔為你收集整理的rapidJson输出时 保留小数位的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。