19-значный номер не анализируется, как в R - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть следующий номер в 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
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000точное время (большое число: 1544018118438041139)

Посоветуйте, пожалуйста, как заставить его работать.

1 Ответ

0 голосов
/ 11 декабря 2018

Похоже, что это предел точности, присущей самой R.Обратите внимание:

x <- 1544018118438041139
as.character(x)

[1] "1544018118438041088"

Итак, я не уверен, что пакет jsonlite ответственен за эту ошибку округления.Исходя из комментария @Konrad, это предел точности для типа данных IEEE.

Существует обходной путь, если все, что вы хотите сделать, это сохранить цифры в исходном номере.Вместо этого вы можете обрабатывать данные как строку:

'["1544018118438041139",162.0,38.0,0.023529414,1.0,2131230815,1]'

Тогда, предположительно, jsonlite будет читать «число» как строку, без каких-либо проблем с точностью.Но тогда у вас все еще будет проблема, если вы решите привести к числовому типу в R и выполнить с ним математику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...