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 中转换为数字并用它做数学运算,你仍然会遇到问题。
我在字符数组的 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 中转换为数字并用它做数学运算,你仍然会遇到问题。