Калькулятор округляет

Тема в разделе "JavaScript", создана пользователем volodka993, 10 янв 2017.

Модераторы: ZiX
  1. volodka993

    volodka993 Постоялец

    Регистр.:
    25 май 2014
    Сообщения:
    50
    Симпатии:
    25
    Здравствуйте
    Имеется калькулятор расчет секций радиаторов.
    Задаются значения ПЛОЩАДИ и ВЫСОТЫ, так же имеется константа 34 вт
    Калькулятор округляет числа до целых.
    Например:

    Площадь - 10м
    Высота - 3м

    10м*3м*34вт=1020ВТ

    Если ввести высоту 3.5м, то результат будет такой же, т.е не умножается значение после запятой.

    Скрипт
    Код:
      $('.rad_calc .gray').click(function(){
            var constVT = 33;
            var heatOne = 140;
            var heatAll = $('.rad_calc .heat_all').html();
            var cntSection = $('.rad_calc .cnt_section').html();
            var square = $('.rad_square').val();
            var height = $('.rad_height').val();
    
          
            if(square !== undefined && height !== undefined && heatAll !== undefined){
                square = parseInt(square);
                height = parseInt(height);
    
                //если есть свойства теплоотдача и кол-во секций, вычисляем теплоотдачу одной секции
                if(heatAll !== '' && cntSection !== ''){
                    heatAll = parseFloat(heatAll);
                    cntSection = parseInt(cntSection);
                    heatOne = heatAll / cntSection;
                }
    
                var volume = square * height;
                var heat = volume * constVT;
                var sectionCount = Math.ceil(heat / heatOne);
              
                $('.rad_heat i').html(heat);
                $('.rad_cnt i').html(sectionCount);
    
            }
            return false;
        });

    HTML
    HTML:
                                <div class="green bold">Калькулятор расчёта количества секций <div class="hint" title="Калькулятор"></div></div>
                            </div>
                        </div>
                        <div class="mid bg_white">
                            <div class="left f14 c333">Площадь<br/> помещения м2</div>
                            <input class="rad_square number left f13 c666 center inp" value="1" type="text">
                            <div class="left f14 c333">Высота<br/> потолка м</div>
                            <input class="rad_height float left f13 c666 center inp" value="1" type="text">
                            <a href="#" class="btn middle_btn right gray">Рассчитать</a>
                            <div class="heat_all invisible"><?=$arResult['PROPERTIES']['C_ALL_TEPLOOTDACHA']['VALUE']?></div>
                            <div class="cnt_section invisible"><?=$arResult['PROPERTIES']['C_ALL_KOLICHESTVO_SEKTSIY']['VALUE']?></div>
                            <div class="clear"></div>
                        </div>
                        <div class="bot">
                            <div class="inline rad_heat f14 c333 bold">Теплоотдача: <span class="lgreen"><i>0</i> Вт</span></div>
                            <div class="inline rad_cnt f14 c333 bold">Кол-во секций: <span class="lgreen"><i>0</i> шт</span></div>
                        </div>
                    </div>
    
     
  2. Absolute

    Absolute Крокодил ;)

    Регистр.:
    9 авг 2009
    Сообщения:
    430
    Симпатии:
    271
    parseInt округляет, вернее не округляет, а возвращает число перед точкой... Касаемо вашего примера, вот здесь:
    height = parseInt(height);

    Используйте parseFloat
    height = parseFloat(height);
     
    volodka993 нравится это.
  3. volodka993

    volodka993 Постоялец

    Регистр.:
    25 май 2014
    Сообщения:
    50
    Симпатии:
    25
    Работает благодарю, а округление в теплоотдаче как сделать .toFixed(2) не срабатывает
     
  4. Absolute

    Absolute Крокодил ;)

    Регистр.:
    9 авг 2009
    Сообщения:
    430
    Симпатии:
    271
    Округления разные бывают)
    До ближайшего целого числа - Math.round
    В большую сторону - Math.ceil
    В меньшую - Math.floor или дважды побитовая инверсия еще удобно. Т.е.
    var a = 7.8;
    alert(~~a) // выведет 7
     
    volodka993 нравится это.