#laravel #vue.js #inertiajs
#laravel #vue.js #inertiajs
Вопрос:
У меня есть приложение Laravel, которое выдает 17-значные (64-разрядные) числовые идентификаторы (laravel-snowflake)
Когда эта коллекция отображается в инерционном компоненте Vue в качестве реквизита, последние 2 цифры округляются до ближайших 10.
37648503920529408 округляется до 37648503920529410
37648503945695232 округляется до 37648503945695230
Это происходит не всегда, но для большинства идентификаторов.
Я выгрузил коллекцию через каждый класс конвейера, и она всегда соответствует базе данных, только когда она попадает в Vue, идентификаторы округляются.
Есть какие-либо объяснения этому?
Комментарии:
1. Это потому, что ваш идентификатор является числовым представлением, а не строкой, а числовое представление в JS ограничено,
Number.MAX_SAFE_INTEGER
что9007199254740991
равно. Ваше 17-значное число превышает этот диапазон. Решение состоит в том, чтобы приводить не к числу, а к строке.2. АГА. Я знал, что это должно было быть что-то вроде этого. Я нигде не смог найти это задокументировано. Значит, если я изменю это значение на 15 или 16 цифр, я смогу сохранить его как число? Увижу ли я какую-либо разницу в производительности, преобразующую это в строку? Должен ли я выбрать другой метод для генерации идентификаторов?
3. Есть ли способ сообщить Javascript преобразовать это в BigInt? Это BigInteger в MySQL.
4. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
5. Для начала нет причин приводить его к числу, поскольку вы, я полагаю, никогда не собираетесь использовать идентификатор для числовых операций.