Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Visual Basic: Общие вопросы > тип числа -2147483648#


Автор: BlackSun 18.02.19, 18:11
Почему VB к нему старательно лепит тип Double, даже когда я явно пишу -2147483648&? При этом &H80000000 VB не трогает.

Автор: Mikle 18.02.19, 18:30
Хм... похоже на баг.
Так работает:
CLng("-2147483648")

Автор: BlackSun 18.02.19, 18:33
да работает и так:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    lCount As Long
    lCount = -2147483648#


вопрос в том, что у меня нет каких-то фиксов или что это такое?

Добавлено
т.е. я пишу в коде:
lCount = -2147483648

VB правит на:
lCount = -2147483648#

Автор: Mikle 19.02.19, 05:59
Цитата Akina @
Он выбирает ближайший подходящий тип.

Во-первых, Long тоже подходящий, по каким признакам Double оказался ближайшим? Почему для -2147483647 ближайший Long, а для -2147483648 уже Double?
Во-вторых, среда VB6 исправляет на Double даже принудительно обозначенный Long (-2147483648&), вот это я назвал багом.

Автор: TheTrik 19.02.19, 08:07
Цитата Mikle @
Хм... похоже на баг.

Да. Насколько я понял VB6 при разборе считает - (минус) и число разными сущностями и пытается 2147483648 преобразовать в знаковый (VarI4FromStr) и получает ошибку, поэтому после он уже пытается преобразовать 2147483648 как R8. Обойти очень просто: -2147483647 - 1, но хитрыми методами можно и обойти:
chk.png (, : 527)

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)