无法解析R中的19位数字

时间:2018-12-11 14:01:59

标签: r json numeric biginteger

我在JSON字符数组中具有以下数字:

  

[1544018118438041139,162.0,38.0,0.023529414,1.0,2131230815,1]

library(jsonlite)
fromJSON(
  '[1544018118438041139,162.0,38.0,0.023529414,1.0,2131230815,1]'
)

返回:

  

[1] 1544018118438041088.000000000000000000000
  162.000000000000000000000 38.000000000000000000000 [4] 0.023529413999999998497
  1.000000000000000000000 2131230815.000000000000000000000 [7] 1.000000000000000000000

我希望它返回正确的准确时间(很大的数字:1544018118438041139)

请告知如何使其工作。

1 个答案:

答案 0 :(得分:5)

这似乎是R本身固有的精度限制。考虑:

x <- 1544018118438041139
as.character(x)

[1] "1544018118438041088"

因此,我不确定jsonlite包是造成此舍入错误的原因。根据@Konrad注释,这是IEEE数据类型精度的限制。

如果您要做的只是将数字保留在原始数字中,则有一个解决方法。您可以改为将数据视为字符串:

'["1544018118438041139",162.0,38.0,0.023529414,1.0,2131230815,1]'

然后,大概jsonlite将以字符串形式读取“数字”,而不会产生任何精度问题。但是,如果您决定在R中将其转换为数字并对其进行数学运算,则仍然会遇到问题。