1

我正在使用包中fromJSON的将 JSON 转换为 R 对象jsonlite,但数值正在四舍五入。如何控制转换后的数值的精度?

例子

library(jsonlite)
fromJSON('{"lon": -86.143278324353244}')
## $lon
## [1] -86.14328

## Desired output is -86.143278324353244

查看jsonlite代码,我在 parse.c 中将函数调用追溯到R_parse

.Call(jsonlite:::R_parse, "-86.143278324353244", FALSE)
## [1] -86.14328

其他尝试

  • fromJSON有一个digits论点,但它不是一个有效的论点toJSON
  • 其他软件包喜欢rjsonRJSONIO产生类似的结果。
4

3 回答 3

3

在那里...

> print(fromJSON('{"lon": -86.143278324353244}'), digits=20)
$lon
[1] -86.143278324353247
于 2016-03-16T14:30:09.833 回答
0

万一有人还在访问这个 - 我遇到了类似的事情,并且很高兴,这是 JSON 仅具有浮点类型的限制,并且fromJSON导入是四舍五入的。在我的例子中,我试图读取一个纳秒的值,但它被颠簸了 13ns 左右。如果你在 R 中运行:

suppressMessages(library(jsonlite))
options(digits=22)
x=fromJSON('{"ns": 1567002188374607769}')
print(x)
print(fromJSON('{"ns": 1567002188374607769}'), digits=22)

我懂了:

$ns
[1] 1567002188374607872

$ns
[1] 1567002188374607872

...872!=...769 我还没有想出一个好的解决方案,除了可能将 ns 值存储为 JSON 字符串...

于 2019-08-30T11:03:26.413 回答
0

使用该设置可以options(digits = 30)解决我的问题。

于 2020-09-07T23:26:41.930 回答