iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >JsonCpp中的double问题怎么解决
  • 435
分享到

JsonCpp中的double问题怎么解决

2023-06-29 07:06:40 435人浏览 八月长安
摘要

本文小编为大家详细介绍“JSONCpp中的double问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“jsonCpp中的double问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。json文

本文小编为大家详细介绍“JSONCpp中的double问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“jsonCpp中的double问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

json文件里的值

JsonCpp中的double问题怎么解决

程序代码

new_item["Voltage"] = 8.622;new_item["Current"] = 8.63456;new_item["Energy"] = 8.234234;

程序运行结果

JsonCpp中的double问题怎么解决

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问题怎么解决”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: JsonCpp中的double问题怎么解决

本文链接: https://www.lsjlt.com/news/323257.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JsonCpp中的double问题怎么解决
    本文小编为大家详细介绍“JsonCpp中的double问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“JsonCpp中的double问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。json文...
    99+
    2023-06-29
  • JsonCpp中double的问题解决
    json文件里的值 程序代码 new_item["Voltage"] = 8.622; new_item["Current"] = 8.63456; new_item["Energ...
    99+
    2024-04-02
  • JSON反序列化Long变Integer或Double的问题及解决
    目录一、背景二、研究三、如何解决3.0 将类型写入 JSON 字符串中3.1 提供 POJO 类,慎对 Map<String,Object> 序列化3.2 反序列化自定义...
    99+
    2024-04-02
  • double类型精度丢失问题以及解决方法
    double类型精度丢失问题: (1)加法运算。 public static void main(String[] args) {double number1 = 1;double number2 = 20.2;double number3...
    99+
    2023-09-07
    java android
  • mysql的中文问题怎么解决
    这篇文章主要介绍了mysql的中文问题怎么解决,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。我存入和取出都是中文,可是在mysql里面却看到...
    99+
    2024-04-02
  • 怎么解决mysql中的ERRORInnoDB问题
    本篇内容介绍了“怎么解决mysql中的ERRORInnoDB问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所...
    99+
    2024-04-02
  • MFC中IMPLEMENT_DYNAMIC的问题怎么解决
    在MFC中,IMPLEMENT_DYNAMIC宏用于实现动态创建的类的类型信息。如果在编译时出现关于IMPLEMENT_DYNAMI...
    99+
    2023-10-28
    MFC
  • 怎么解决mysql中的innobackupex问题
    本篇内容介绍了“怎么解决mysql中的innobackupex问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有...
    99+
    2024-04-02
  • C#中的CRITICAL_SECTION问题怎么解决
    在 C# 中,没有直接的类似于 C++ 中的 CRITICAL_SECTION 的同步原语。不过,你可以使用 Monitor 类来实...
    99+
    2023-09-26
    C#
  • PHP中PathFileExists的问题怎么解决
    在 PHP 中,可以使用 file_exists() 函数来检查文件或目录是否存在。 如果您遇到 PathFileExists 的问...
    99+
    2024-02-29
    PHP
  • windows中NOTIFYICONDATA的问题怎么解决
    在Windows中,NOTIFYICONDATA是用于在系统托盘中显示图标和相关信息的结构体。 解决NOTIFYICONDATA的问...
    99+
    2024-02-29
    windows
  • jsp中session.setAttribute()的问题怎么解决
    如果在使用jsp中的session.setAttribute()方法时遇到问题,可以尝试以下解决方法: 检查session是否已...
    99+
    2023-10-28
    jsp
  • 如何解决JSON反序列化Long变Integer或Double的问题
    这篇文章主要为大家展示了“如何解决JSON反序列化Long变Integer或Double的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决JSON反序列化Long变Integer或Do...
    99+
    2023-06-26
  • android中FLAG_ACTIVITY_NEW_TASK问题怎么解决
    在Android中,FLAG_ACTIVITY_NEW_TASK标志用于启动一个新的任务栈。如果出现FLAG_ACTIVITY_NE...
    99+
    2023-08-19
    android
  • Java中executeBatch()问题怎么解决
    在 Java 中,executeBatch() 方法用于执行一批 SQL 语句。如果你遇到了 executeBatch() 方法无法...
    99+
    2023-09-14
    Java
  • PHP中includefile问题怎么解决
    在PHP中,使用include或require语句来包含其他的文件。如果在包含文件时出现问题,可以尝试以下解决方法: 检查文件路...
    99+
    2023-10-30
    PHP
  • Delphi中codegear问题怎么解决
    要解决Delphi中CodeGear的问题,可以尝试以下方法:1. 更新CodeGear版本:确保您正在使用最新的CodeGear版...
    99+
    2023-09-22
    Delphi
  • C#中InvalidateRect问题怎么解决
    在C#中,InvalidateRect是用于无效化指定矩形区域的方法。当需要重新绘制该区域时,可以调用该方法。如果在使用Invali...
    99+
    2023-09-11
    C#
  • 怎么解决InnoDB中的5242880 bytes问题
    这篇文章主要介绍“怎么解决InnoDB中的5242880 bytes问题”,在日常操作中,相信很多人在怎么解决InnoDB中的5242880 bytes问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用...
    99+
    2024-04-02
  • Ubuntu 9.10 Grub中的问题怎么解决
    本篇内容介绍了“Ubuntu 9.10 Grub中的问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Ubuntu自从9.10开始采...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作