Показать сообщение отдельно
  #50 (permalink)  
Старый 25.11.2009, 11:07
Новичок на форуме
Отправить личное сообщение для askarbin Посмотреть профиль Найти все сообщения от askarbin
 
Регистрация: 25.11.2009
Сообщений: 2

У меня собственно говоря похожая задача стоит и похожая проблема (я практически не знаю JavaScript).
Есть табличка с числами, при выполнении команды функция выполняет преобразования со всеми численными полями таблицы (умножение или деление).
Так вот проблема заключается в том, что у нас пересчет происходит не совсем верно, при пересчете туда - и обратно получаем разницу на выходе. Я понимаю, что это связано с проблемой округления (но шеф четко ставит задача округления до целочисленного значения, ну в крайнем случае - 2 символа после запятой).
Теоретически подумав я решил, что неплохо было бы при выполнении преобразования сохранять изначальное значение в какую-нибудь временнную переменную, а при обратном действии не выполнять математическую операцию, а возвращать значение из временной переменной.
Примеры функции вот:
1. Прямое преобразование

function exchange_currency_ru(_curs) {

    if(now_c == _curs){

    } else {

    exchange_currency_back_ru(now_c);

    $('#mtable').each(function(){
    var $table = $(this);
    $table.find('td').each(function(){
    var $td = $(this).text();

     if(Math.abs($td)){
     $td = parseInt($td);

     if(_curs == 'grn'){
      eval($td /= <?php print $ru_currenci_grn ?>);
     }
     if(_curs == 'usd'){
     eval($td /= <?php print $ru_currenci_usd ?>);
     }
     if(_curs == 'eur'){
     eval($td /= <?php print $ru_currenci_eur ?>);
     }
     $td = $td.toFixed(2);
     $(this).text($td);
    }
    })
    });
    }
    now_c = _curs;
    }

2. Обратное преобразование

function exchange_currency_back_ru(_curs){

    $('#mtable').each(function(){
    var $table = $(this);
    $table.find('td').each(function(){
    var $td = $(this).text();

     if(Math.abs($td)){
     $td = parseInt($td);

     if(_curs == 'grn'){
     eval($td *= <?php print $ru_currenci_grn ?>);
     }
     if(_curs == 'usd'){
     eval($td *= <?php print $ru_currenci_usd ?>);
     }
     if(_curs == 'eur'){
     eval($td *= <?php print $ru_currenci_eur ?>);
     }

     $td = $td.toFixed(2);
     $(this).text($td);
    }
    })
    });
    }
Ответить с цитированием