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

时间:2018-10-26 09:32:40

标签: javascript json floating-point node-red

情况: 我的传感器测量在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的帮助很大。

1 个答案:

答案 0 :(得分:0)

认为此帖子已经存在: Force float value when using JSON.stringify

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