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

Ste*_*veS 4 json r 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]'
)
Run Code Online (Sandbox Code Playgroud)

收益:

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

我想让它返回正确的确切时间(大号:1544018118438041139)

请告知如何使其工作.

Tim*_*sen 5

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

x <- 1544018118438041139
as.character(x)

[1] "1544018118438041088"
Run Code Online (Sandbox Code Playgroud)

所以,我不确定jsonlite软件包是否会导致此舍入错误.基于@Konrad注释,这是IEEE数据类型的精度限制.

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

'["1544018118438041139",162.0,38.0,0.023529414,1.0,2131230815,1]'
Run Code Online (Sandbox Code Playgroud)

然后,可能jsonlite会将"数字"读作字符串,而不会出现任何精确问题.但是如果您决定在R中使用数字并使用它进行数学计算,那么您仍会遇到问题.

  • 这不是一个舍入错误,它是IEEE数据类型的有限精度(这可能是你的意思,但"舍入"意味着有损数学运算,而这只是一种格式限制). (5认同)
  • 什么是解决方案?要使用gmp包和as.bigz? (2认同)