Вот так правильней, самый практичный вариант:
Открыть/закрыть stock numlen(number)
{
if(number < 0)
{
if(number == cellmin)
number = |(cellmin+1)|+1;
else
number = |number|;
}
if (number < 100_000)
{
if (number < 100)
return 1 + _:(number >= 10);
if (number < 10_000)
return 3 + _:(number >= 1_000);
return 5;
}
if (number < 10_000_000)
return 6 + _:(number >= 1_000_000);
if (number < 1_000_000_000)
return 8 + _:(number >= 100_000_000);
return 10;
}
Теперь поддерживается и cellmin (минимально возможное число) благодаря тому, что к cellmin прибавляется 1 (она становится не самая маленькая), из cellmin+1 вычисляется модуль корректно, и потом к этому модулю прибавляется тот самый 1, который был прибавлен к cellmin, уменьшив модуль на 1.
Лучше, мне кажется, уже нельзя.