Показать сообщение отдельно
Старый 18.10.2008, 03:18   #1  
Qaz Qwerty is offline
Qaz Qwerty
китайский стажер
 
152 / 37 (2) +++
Регистрация: 12.05.2008
Angry Деление на ноль в финансовых отчетах
Постоянно выскакивала проблема с делением на ноль. Как от этого избавиться красиво?
Что испробовано:
- Сначала в методе checkDivisionByZero была добавлена проверка на
textBuffer.find('/(((0)+(0))-((0)+(0)))'), но это оказалось как мертвому припарка, потому что тут де выскочило сообщение типа
"((a+b)/((a+b) - (a+b)) - деление на ноль.
- Тогда в метод calculateColumnCalcListColumn был добавлен код

X++:
ZeroDivider = false;
        dividerpos = strscan(str2, '/',1,999);
        divider = substr(str2,dividerpos+1,strlen(str2)-dividerpos-1);
        if (dividerpos != 0 && divider != '')
        {
            bufdevider = strfmt(buf, divider);
            if (compiler.compile(bufdevider) && (! this.checkDivisionByZero(bufdevider)))
            {
                //BP Deviation documented
                tmpAmount = runbuf(bufdevider);
            }
            else
            {
              //  info(strfmt("@SYS85024", str2, _ledgerBalColumnsDim.Column, idx_calc));
                tmpAmount = 0;
            }
        if (tmpAmount == 0)
            ZeroDivider = true;
        }       
        //if (compiler.compile(buf2) && (! this.checkDivisionByZero(buf2))) 
        if (compiler.compile(buf2) && (! this.checkDivisionByZero(buf2)) && !ZeroDivider)         
{
...
и далее по тексту, но ведь если разобраться, то может быть вложенное деление на ноль...
Как же это сделать красиво, может кто нибудь уже боролся с этим?
__________________
Может быть выйдет, а может не-е-е-ет...
Новая песня вместо штиблет..