19 位数字不会像在 R 中那样被解析

19 digit number doesn't get parsed as is in R

我在字符数组的 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]'
)

returns:

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

我希望它return正确的确切时间(大数字:1544018118438041139)

请告知如何让它工作。

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

x <- 1544018118438041139
as.character(x)

[1] "1544018118438041088"

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

如果您只想保留原始号码中的数字,则有一个解决方法。您可以将数据视为字符串:

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

然后,大概 jsonlite 会将 "number" 作为字符串读入,而不会出现任何精度问题。但是如果你决定在 R 中转换为数字并用它做数学运算,你仍然会遇到问题。