Назад к блогу
Платформа

Точность JavaScript Number и переносимость между средами

Сохраняйте числовые значения между IEEE-754, BigInt, JSON и резервными путями runtime.

BotBrowser Team

Документация

Нужна структурированная документация по теме Платформа?

Эта статья относится к редакционной библиотеке. Для пошаговой настройки, справки и постоянных обновлений переходите сразу в соответствующий раздел docs.

Переносимость чисел является контрактом данных. Значение проходит форму, JavaScript, JSON, worker и сервис, а на каждой границе может измениться представление. Number использует binary64 IEEE-754, поэтому многие десятичные дроби и большие целые неточны. Сначала зафиксируйте представление, затем сравнивайте среды.

Границы представления

Используйте Number, когда диапазон и округление подходят binary64. Number.MAX_SAFE_INTEGER равен 2^53 - 1; проверяйте Number.isSafeInteger до операции. BigInt хранит произвольные целые, но не дроби и не смешивается с Number без явного преобразования. Длинные идентификаторы держите строкой или BigInt и отклоняйте неясные преобразования.

Справка MDN Number и справка MDN BigInt описывают язык, но не правильность баланса или счёта. Бизнес-правило задаёт приложение.

Безопасные целые и округление

Определите режим, единицу и границу округления. Math.round не является универсальной финансовой политикой, особенно для отрицательных половин. При требованиях точности используйте масштабированные целые или десятичную строку. Локальный формат отделяйте от канонического значения: Intl.NumberFormat создаёт отображение.

Проверяйте отрицательные, половинные, очень большие и малые значения. После потери битов при небезопасном Number исходное целое восстановить нельзя.

JSON и сериализация

В JSON нет типа BigInt. JSON.stringify({ amount: 1n }) без политики завершается ошибкой. Используйте помеченную форму { "kind": "bigint", "value": "9007199254740993" }, проверяйте метку и диапазон, затем создавайте BigInt. Для точных дробей передавайте строку с объявленными масштабом и знаком.

Проверяйте безопасное и первое небезопасное целое, 0.1 + 0.2, отрицательную половину и 64-битный идентификатор в окне, worker и сервисе. Сравнивайте каноническое представление и смысловой результат.

Резерв между средами

Проверяйте реальный путь и записывайте возможность вроде bigint-json-adapter-v2, а не личность браузера. Если адаптер отсутствует, перечитайте исходную строку и выберите строковый путь или сервис с тем же schema. Потерянные при Number биты не восстанавливаются.

BotBrowser может выполнять авторизованные сценарии числовых форм, сериализации и повторяемого сравнения в документированных конвейерах, но он не меняет IEEE-754, не добавляет десятичную арифметику и не сертифицирует бизнес-расчёт. См. расширенные возможности BotBrowser.

Ввод и доказательства

Создайте запись задачи до разбора и сохраните текст, знак, масштаб и schema. Используйте граничные фикстуры, отмену, перезапуск worker, неверную метку и старый endpoint. Диагностика хранит этап и версию, но не балансы. Объявляйте резерв, сохраняйте фокус и оставляйте ввод редактируемым. См. проверку выпусков и руководство по совместимости.

Фиксированная запись выпуска

Публикуйте schema, примеры, parser, serializer, режим округления, резерв, контексты и ожидаемые результаты. Разделяйте точность и время. Сохраняйте отрицательное доказательство отказа старого JSON от BigInt и успеха помеченного адаптера. Исправление создаёт новую неизменяемую запись. Последовательность: представление, защита, сериализация, проверка, резерв, доказательство.

Контракт клиента выбирает каноническую форму.

Начальные нули могут быть частью идентификатора.

Округление выполняется один раз на объявленной границе.

Отображение с локализацией не заменяет сохранённое значение.

Знак сохраняется при смене представления.

Масштаб сопровождает каждую переданную дробь.

Значение вне диапазона даёт восстанавливаемое состояние.

Пользователь может исправить поле без повторного ввода.

Адаптер сохраняет ввод при смене пути.

Сервис получает ожидаемую схему.

Окно и worker используют канонические примеры.

Parser проверяет данные до преобразования.

Serializer отклоняет необъявленные типы.

Ответ JSON сохраняет тот же масштаб.

Сравнение проверяет тип и результат.

Тест содержит отрицательное значение.

Тест содержит точную половину.

Тест содержит целое около предела.

Тест содержит строку с начальными нулями.

Тест содержит пустой ввод.

Тест содержит неизвестную метку.

Отмена оставляет источник доступным.

Перезапуск worker не меняет контракт.

Кэш использует каноническую форму.

Обновление сохраняет прежнюю совместимость.

Документация показывает принятый и отклонённый случаи.

Интерфейс объявляет выбранный резерв.

Видимый результат указывает единицу.

Поддержка получает этап и версию, но не частное значение.

Числовой ввод проходит границы представления к проверенному результату.

Публичные источники

#JavaScript#Точность Чисел#BigInt#Переносимость

Переведите BotBrowser из исследований в продакшн

Используйте эти руководства, чтобы понять модель, а затем перейти к кроссплатформенной валидации, изолированным контекстам и масштабируемому браузерному развертыванию.