Как восстановить переполненный лонг в PowerBuilder
Использование PowerBuilder 12.5...
Мой клиент долго сохранял значение и сохранял его в базе данных. В конце концов значения превысили возможное значение в long, поэтому он начал хранить негативы в базе данных. Я знаю, как восстановить исходное число, если переполнено целое число:
ABS(ai_int) + ((32768 - abs(ai_int)) * 2)
но используя ту же формулу с размером long
в 32768 не работает. Может ли кто-нибудь помочь мне вернуть отрицательное число тому, что хотел пользователь?
1 ответ
Просто назначьте Long для UnsignedLong, и это будет ожидаемое значение. Для демонстрации создайте окно и поместите в него MultilineEdit, затем поместите его в событие Open:
long ll_max = 2147483647
long ll_a, ll_b, ll_c
unsignedlong lul_a, lul_b, lul_c
string ls_out
ll_a = ll_max + 1
ll_b = ll_a + 1
ll_c = ll_b + 1
lul_a = ll_a
lul_b = ll_b
lul_c = ll_c
ls_out = string(ll_max) + "~r~n"
ls_out += string(ll_a) + "~r~n"
ls_out += string(ll_b) + "~r~n"
ls_out += string(ll_c) + "~r~n~r~n"
ls_out += string(ll_max) + "~r~n"
ls_out += string(lul_a) + "~r~n"
ls_out += string(lul_b) + "~r~n"
ls_out += string(lul_c) + "~r~n"
mle_1.text = ls_out
Выше приведен этот вывод:
2147483647
-2147483648
-2147483647
-2147483646
2147483647
2147483648
2147483649
2147483650