Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Длинное число после преобразования в строку изменяется (http://www.flasher.ru/forum/showthread.php?t=215804)

djken 01.10.2021 03:06

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

Например, если так преобразую
Код AS3:

2674332404735588964 + "" // результат 2674332404735588864 - окончание не совпадает с исходным в итоге

при таком способе
Код AS3:

new String(2674332404735588964) // итог вообще такой 2674332404735590000

P.S.
в догонку вопрос
Код AS3:

"2674332404735588964" == 2674332404735588964 ? "YES" : "NO" // YES

значения одинаковые, но типы разные у этих айдишников - скрипт их нормально сравнивает и определяет, что они идентичны :confused: так и должно быть? Если в разных типах числа нормально сравниваются, может тогда и не стоит париться с преобразованием?

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

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

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

udaaff 03.10.2021 01:11

Цитата:

значения одинаковые, но типы разные у этих айдишников - скрипт их нормально сравнивает и определяет, что они идентичны так и должно быть? Если в разных типах числа нормально сравниваются, может тогда и не стоит париться с преобразованием?
Строгое равенство и нестрогое равенство есть. Нестрогое может конвертировать типы в сравниваемые.
Цитата:

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


Часовой пояс GMT +4, время: 04:16.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.