JsonCpp中的double问题怎么解决
发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,本文小编为大家详细介绍"JsonCpp中的double问题怎么解决",内容详细,步骤清晰,细节处理妥当,希望这篇"JsonCpp中的double问题怎么解决"文章能帮助大家解决疑惑,下面跟着小编的思路
千家信息网最后更新 2025年01月18日JsonCpp中的double问题怎么解决
本文小编为大家详细介绍"JsonCpp中的double问题怎么解决",内容详细,步骤清晰,细节处理妥当,希望这篇"JsonCpp中的double问题怎么解决"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
json文件里的值
程序代码
new_item["Voltage"] = 8.622;new_item["Current"] = 8.63456;new_item["Energy"] = 8.234234;
程序运行结果
Jsoncpp的json_write.cpp中
std::string valueToString(double value, bool useSpecialFloats, unsigned int precision) { // Allocate a buffer that is more than large enough to store the 16 digits of // precision requested below. char buffer[32]; int len = -1; char formatString[6]; sprintf(formatString, "%%.%dg", precision); // Print into the buffer. We need not request the alternative representation // that always has a decimal point because JSON doesn't distingish the // concepts of reals and integers. if (isfinite(value)) { len = snprintf(buffer, sizeof(buffer), formatString, value); } else { // IEEE standard states that NaN values will not compare to themselves if (value != value) { len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "NaN" : "null"); } else if (value < 0) { len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "-Infinity" : "-1e+9999"); } else { len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "Infinity" : "1e+9999"); } // For those, we do not need to call fixNumLoc, but it is fast. } assert(len >= 0); fixNumericLocale(buffer, buffer + len); return buffer;}
这里sprintf(formatString, "%%.%dg", precision);的结果是"%.17g"。是输出17位的有效数字。不足的补足17位。
ps:JsonCpp的小数精度问题和插入输出顺序问题
直接说吧,这两个问题无法解决,如下:
官方不支持指定小数位数,double默认位宽为17位,如:"value" : 7.0999999999999996,
官方不支持按插入顺序输出,而是按照key的字母排序输出的,不管你什么顺序插入,下面的都是这样的顺序输出的:
"avg_abcdd " : 1.1632640000000014,"avg_pxczzczxczxd " : 7.0999999999999996,"avg_shczxcdize " : 802000.0,"deviccxz " : "shebei25","sh423423fd " : 1420,"vcxzcasdasdadczco " : 231
个人应急想法
数字精度问题,可以考虑在C++中转为自己需求的精度,然后再当作字符串放到json中,至于之后的解析,读字符串再转数字即可;
顺序问题,两个想法:
1)不要用key,采用append的形式,也就是将每个条目放在一个容器中
Json::Value res; std::string = entry_str; entry_str.append("zhangsan,123"); entry_str.append("abc,2596"); ....... res["entry"] = entry_str;
2)那就按名字命令咯,顺应规则,2333333
读到这里,这篇"JsonCpp中的double问题怎么解决"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
问题
顺序
输出
数字
文章
精度
两个
内容
字符
字符串
官方
小数
想法
程序
结果
支持
妥当
有效
也就是
代码
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
鸿星岩大数据库培训学校
计算机网络技术基层职位
构建网络安全机制的途径是
软件开发安全性专业术语
汇川软件开发有限公司
linux网络安全入门到精通
数据库文件只能有一个
服务器租用认证条件
上海选课系统软件开发
教育局组织网络安全培训
全文报刊数据库有哪几个
博达软件开发
期货软件开发-排名
惠州汽车软件开发常见问题
服务器电脑的ip
网络安全基础知识ppt
腾讯云服务器可以玩游戏么
mdb数据库加载不进去数据
数据库字符串索引搜索慢
网络安全测评师课件
扬州银联软件开发业务流程
计算机网络技术真题2020
时钟服务器管理制度
新华三 c软件开发
网络安全大作业找bug
网络安全技术科技馆
十九期间网络安全
宝塔数据库连接出错
数据库设置成外键
传感网络安全协议栈