情况:我的传感器测量数据,我在 NodeRED 函数中处理这些数据,然后解析成 JSON 对象。NodeRED 函数允许我编写 JavaScript 代码。JSON 对象被发送到一个接收模块,该模块以C++编写,该模块使用 JSON 处理JSON_spirit库。 我无法更改接收模块。
问题:接收应用程序尝试使用函数value.get_float()
获取 JSOn 的一个值。传感器有时测量精确的 1.00。这被传递给 JSON 作为{"value":1}
.接收模块终止并显示错误:
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 可以省略不必要的小数,它就会这样做。所以,我还没有找到解决方案。
欢迎任何想法。
PS:这是我第一次提出StackOverflow问题,所以请不要对我太苛刻:)
编辑:我找到了以下解决方法。 我在第一个音符中使用value.toFixed(2);
来获得{"value":"1.00"}
.稍后,我在 NodeRED 的 change-Node 中的字符串上使用正则表达式。 正则表达式:
"Value":"(d+.d{2})"
替换为:
"Value":$1
我的真实案例比示例复杂一些,所以正则表达式更长一些。但是正则表达式 101 帮助很大。
认为这篇文章已经在那里了: 使用 JSON.stringify 时强制浮点值
所以我认为在 Javascript 中 1 和 1.0 之间没有区别