Показать сообщение отдельно
Старый 01.10.2021, 03:06
djken вне форума Посмотреть профиль Отправить личное сообщение для djken Посетить домашнюю страницу djken Найти все сообщения от djken
  № 1  
Ответить с цитированием
djken
 
Аватар для djken

Регистрация: May 2010
Адрес: Краснодар
Сообщений: 182
Отправить сообщение для djken с помощью ICQ Отправить сообщение для djken с помощью Skype™
По умолчанию Длинное число после преобразования в строку изменяется

Задача стоит сравнивать айдишники. Одни могут приходить в числовом типе, другие в строковом, поэтому заведомо перевожу их все в строковый тип. Но заметил, что приложение в кое-какие моменты ведет себя не корректно - предположил что такое поведение в приложении может происходить, когда айди не совпадают, хотя должны. Давай проверять - и оказалось что так и есть. При преобразовании айдишников в строку их значение меняется и уже отличается от исходного.

Например, если так преобразую
Код AS3:
2674332404735588964 + "" // результат 2674332404735588864 - окончание не совпадает с исходным в итоге
при таком способе
Код AS3:
new String(2674332404735588964) // итог вообще такой 2674332404735590000
P.S.
в догонку вопрос
Код AS3:
"2674332404735588964" == 2674332404735588964 ? "YES" : "NO" // YES
значения одинаковые, но типы разные у этих айдишников - скрипт их нормально сравнивает и определяет, что они идентичны так и должно быть? Если в разных типах числа нормально сравниваются, может тогда и не стоит париться с преобразованием?

Добавлено через 15 часов 20 минут
Все эти айдишники длинные получаю в JSON - в каких-то версиях они в кавычках, где-то в без. Поэтому после JSON.parse первые становятся строковыми данными, вторые числовыми и с потерями из-за превышения размерности типа Number.

Все что перепробовал не помогает перевести эти числа нормально в строку. Попробовал и параметр reviver в JSON.parse - тоже не помогает, видать он тупо как фильтр работает.

Вижу пока единственный выход - это перед тем как парсить json, всю эту текстовую портянку пропускать через регулярку и большие числа заключать в кавычки..
__________________
кто не отвечает, того garbage collector забирает