我在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)
请告知如何使其工作。
答案 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中将其转换为数字并对其进行数学运算,则仍然会遇到问题。