【问题标题】:Parse float with decimals to JSON in JavaScript also for 1 as 1.00在 JavaScript 中将带小数的浮点数解析为 JSON 也为 1 为 1.00
【发布时间】:2019-03-31 00:51:28
【问题描述】:

情况: 我的传感器测量数据,我在 NodeRED 函数中处理这些数据,然后解析为 JSON 对象。 NodeRED 函数允许我编写 JavaScript 代码。 JSON 对象被发送到用 C++ 编写的接收模块,该模块使用 JSON_spirit 库处理 JSON。我无法更改接收模块。

问题: 接收应用程序尝试使用函数value.get_float() 获取JSOn 的一个值。传感器有时会测量到精确的 1.00。这将作为{"value":1} 传递给JSON。接收模块以错误终止:

terminate called after throwing an instance of 'std::runtime_error'
what():  get_value< real > called on integer Value

显然,value.get_float() 函数似乎无法将 1 更改为 1.0,并且如前所述,我无法更改使用的函数。所以,我需要想办法把{"value":1.00}解析成JSON。

我尝试过的: 我在我的 NodeRED 函数 value.toFixed(2) 中进行了尝试,但这将返回一个字符串 {"value":"1.00"}。 所以,我尝试像这样再次将字符串解析为浮点数

value.toFixed(2);
value = parseFloat(value);

但这会导致 1.00 再次变成这样的 JSON:{"value":1}。 我也尝试了一些四舍五入的技巧,但只要 JavaScript 可以省略不必要的小数,它就可以了。所以,我还没有找到解决办法。

欢迎提出任何想法。

P.S.:这是我第一次提出 StackOverflow 问题,所以请不要对我太苛刻 :)


编辑:我找到了以下解决方法。 我在第一个注释中使用value.toFixed(2); 来获取{"value":"1.00"}。稍后,我在 NodeRED 的 change-Node 中对字符串使用正则表达式。 正则表达式:

"Value":\"(\d+\.\d{2})\"

替换为:

"Value":$1

我的真实案例比示例复杂一些,因此正则表达式要长一些。但是regex101 帮了大忙。

【问题讨论】:

  • 如果您有解决方案,请将其添加为答案并将其标记为已接受而不是编辑问题,这有助于其他人更容易找到它。

标签: javascript json floating-point node-red


【解决方案1】:

认为这篇文章已经存在: Force float value when using JSON.stringify

所以我认为在 Javascript 中 1 和 1.0 之间没有区别

【讨论】:

  • 谢谢。您的链接完全指向我需要知道的内容。不幸的是,我自己一开始并没有找到它。但是另一个问题的答案表明,似乎无法实现我所需要的:(
  • 是的,可悲的是:(也许它使用了 json 的显式数据类型。我认为有一些东西可以识别出浮动的值
猜你喜欢
  • 1970-01-01
  • 2016-10-19
  • 1970-01-01
  • 1970-01-01
  • 2011-07-02
  • 2011-05-25
  • 2021-06-30
  • 2017-08-05
  • 1970-01-01
相关资源
最近更新 更多