Nativescript преобразует длинные числа - последние 3 цифры заменены на 000 - PullRequest
0 голосов
/ 10 января 2019

У меня есть Http-вызов API, который возвращает некоторые данные. Данные следующие:

{
"id": 7728806673365567000,
"title": "Status Unknown"
}

А теперь проблема с идентификатором, как в базе данных, идентификатор: 7728806673365567677 Итак, действительный идентификатор имеет 677 как последние 3 цифры, но данные, возвращаемые из API, содержат 000, поэтому:

Действительный: 7728806673365567677

Неверно: 7728806673365567000

Мне интересно, в чем проблема с этим. Может, это сработает, если ID будет строкой, а не числом?

Спасибо за любой совет.

РЕДАКТИРОВАТЬ: Теперь я вижу, что данные в бэкэнде на самом деле строка: "7728806673365567000" Но Http-вызов меняет это на номер?

Ответы [ 4 ]

0 голосов
/ 10 января 2019

Вы можете использовать, BigInteger Модуль NPM для решения этой проблемы, также вы можете использовать некоторые парсеры для этой проблемы, см. Это,

Stackoverflow Вопрос

0 голосов
/ 10 января 2019

база на

Number.MAX_SAFE_INTEGER

9007199254740991

var d=7728806673365567677 ;

1010 * не определено *

d.toString()

"7728806673365567000"

typeof d

"номер"

Number.isSafeInteger(7728806673365567677 )

ложь

Number.isSafeInteger (7728806673365567)

правда

так

var data = {
"id": 7728806673365567677,
"title": "Status Unknown"
};

data.id;

"7728806673365567677"

и

var data = {
"id": "7728806673365567677",
"title": "Status Unknown"
};

data.id;

7728806673365567000

например в php (нажмите, чтобы попробовать код)

$data= array(
    'id' => 7728806673365567677,
    'title' => 'Status Unknown',
);

echo json_encode($data,JSON_NUMERIC_CHECK);

должен решить эту проблему и вернуть

{
"id": "7728806673365567677",
"title": "Status Unknown"
};

вам нужно установить пакет 'php5-json'

0 голосов
/ 10 января 2019

Да, вы должны представлять это как строку. Это больше, чем макс. возможное число в JS 2 ^ 53 - 1 или 9007199254740991.

Из-за этого его усеченные числа забрали, заменили нулями. Я не знаю, откуда это специфическое поведение, но, похоже, это происходит.

См: Какое наибольшее целочисленное значение в JavaScript может быть достигнуто числом без потери точности?

0 голосов
/ 10 января 2019

Это не имеет ничего общего с NativeScript. Вы можете назвать это ограничением в JavaScript, вы превышаете максимально допустимое целое число, поддерживаемое JavaScript. Результат будет таким же, если вы попробуете это в среде браузера.

Так как вы уже упоминали, используйте String вместо Number, это должно решить эту проблему.

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