【发布时间】: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