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

标签 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)

请告知如何使其工作。

最佳答案

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

x <- 1544018118438041139
as.character(x)

[1] "1544018118438041088"

所以,我不确定 jsonlite包负责此舍入错误。根据@Konrad 评论,这是 IEEE 数据类型的精度限制。

如果您只想保留原始号码中的数字,则有一种解决方法。您可以将数据视为字符串:
'["1544018118438041139",162.0,38.0,0.023529414,1.0,2131230815,1]'

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

关于r - 19 位数字不会像在 R 中那样被解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53725749/

相关文章:

r - 将绘图保存为 EMF 文件

r - 在嵌套函数中传递参数以更新默认参数

javascript - 对于每个LOOP通过JSON.Stringify图像的EXIF数据

json - Cakephp REST API消除了.format的必要性

c# - 向量和矩阵是引用类型还是值类型? Math.Net 数值

r - %*%+ 在矩阵运算中是什么意思?

r - 从 GitHub 导入 SQLite 数据库

java - GWT for 循环不是循环

在 C 中创建数字目录

matlab - 在 Matlab 中转置矩阵和求解线性系统时出现奇怪的数值错误