在 JavaScript 中将带有小数的浮点数解析为 JSON,也将 1 解析为 1.00



情况:我的传感器测量数据,我在 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 之间没有区别

相关内容

最新更新