javascript - 使用 Math.ceil 两次 - 仍然有小数并得到意想不到的答案

标签 javascript jquery ceil

我试图让输入在方程中的两个不同时间进行舍入,但我总是以小数结束。理想情况下,该方程应采用“素材”,乘以 12,向上舍入到最接近的整数,再乘以 3.5,乘以 1.05%,再次向上舍入到最接近的整数,并将其作为“总计”的值它用于“picketQuantity”的值。不幸的是,我不断得到小数,并且答案与我的预期相差甚远。例如,如果您在“footage”中输入“100”,在“fenceHeight”中输入“6ft”,在理想情况下输入“1x3.5x6”“total”,因此“picketQuantity”应该返回 361,但我得到的是 447.3。

如果有人能指出我错在哪里,我将不胜感激。谢谢大家! 这是一个 JSFiddle - http://jsfiddle.net/gv0029/xw3DA/

HTML:

<form>
<fieldset id="fence">
    <div name="inputFence" class="inputFence">
        <legend><strong>Fence Description</strong>
        </legend>
        <label>Footage:
            <input name="footage_1" class="footage" />
        </label>
        <select name="fenceHeight_1" class="fenceHeight">
            <option value="select">Select Fence Height</option>
            <option value="6" id="fH6">6 Ft.</option>
            <option value="8" id="fH8">8 Ft.</option>
        </select>
        <select name="fenceStyle_1" class="fenceStyle">
            <option value="select">Style</option>
            <option value="bnb" id="bnb">Board on Board</option>
            <option value="sbs" id="sbs">Side By Side</option>
        </select>
        <select name="picketSize_1" class="picketSize">
            <option value="select">Picket Size</option>
            <option value="1x3.5x6" id="1x4">1 x 3.5 x 6</option>
            <option value="1x4x6" id="1x4">1 x 4 x 6</option>
            <option value="1x5x6" id="1x4">1 x 5 x 6</option>
            <option value="1x5.5x6" id="1x4">1 x 5.5 x 6</option>
            <option value="1x6x6" id="1x4">1 x 6 x 6</option>
        </select>
        <legend><strong>Post Type</strong>
        </legend>
        <label>Picket Quantity
            <input name="picketQuantity_1" class="picketQuantity" />
        </label>
    </div>
</fieldset>

</form>

JS:

//Quantity for Pickets          
$(document.body).on('keypress keydown keyup change', '[class^="footage"],[class^="fenceHeight"], [class^="picketSize"],[class^="fenceStyle"], [class^="picketQuantity"]', function() {
            var parts = $(this).attr('name').split("_");
                fenceNumber = parts[1],

                footage = parseFloat($(":input[name='footage_" + fenceNumber + "'" + ']').val(), 10),
                fenceHeight = $(":input[name='fenceHeight_" + fenceNumber + "'" + ']').find('option:selected').val(),
                fenceStyle = $(":input[name='fenceStyle_" + fenceNumber + "'" + ']').find('option:selected').val(),
                picketSize = $(":input[name='picketSize_" + fenceNumber + "'" + ']').find('option:selected').val(),             
                picketQuantity = $(":input[name='picketQuantity_" + fenceNumber + "'" + ']'),
                total = '';

        if (!isNaN(Number(fenceHeight))) {
                if(fenceHeight == '6') {
                    if (fenceStyle == 'sbs') {
                         if (picketSize == '1x3.5x6' || picketSize == "1x4x6" || picketSize == "1x5x6") {
                            total = Math.ceil((Math.ceil((footage * 12) / 3.5))*1.05);                  
                         } else if (picketSize == '1x5.5x6' || picketSize == "1x6x6") {
                            total = Math.ceil((Math.ceil((footage * 12) / 5.5)) * 1.05);
                         } else {
                            total = "Select Picket Size";
                         }
                            picketQuantity.val(total);
                    } else if (fenceStyle == 'bnb') {
                         if (picketSize == '1x3.5x6' || picketSize == "1x4x6" || picketSize == "1x5x6") {
                            total = ((Math.ceil((footage * 12) / 8.5) * 3) * 1.05);
                         } else if (picketSize == '1x5.5x6' || picketSize == "1x6x6") {
                            total = ((Math.ceil((footage * 12) / 10.5) * 3) * 1.05);
                         } else {
                            total = "Select Picket Size";
                         }
                            picketQuantity.val(total);
                    } else {
                        picketQuantity.val("Select Fence Style");
                    }   
                } else if (fenceHeight == '8') {
                    total = (Math.ceil(footage / 8))*3;
                    picketQuantity.val(total);
                }
            } else {
                picketQuantity.val("Select Fence Height");
            }
}); 

最佳答案

在第二种 fenceStyle 情况下(当 fenceStyle 等于 bnb 时),没有第二个 Math.ceil 函数在方程中。

更新的 fiddle :http://jsfiddle.net/xw3DA/1/ .

关于javascript - 使用 Math.ceil 两次 - 仍然有小数并得到意想不到的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21316547/

相关文章:

javascript - 停止表单提交并保留表单值

jquery - 修复了具有排序功能的标题 GridView

javascript - 如何在图像之间留出空间?

javascript - 在实时点击时切换突出显示 tr/td,但如果点击输入/选择则不切换

c - Ceil 和整数的使用

c - 四舍五入为整数

javascript - 如何使用 ember-rest Controller 来处理 Rails3 嵌套资源?

javascript - 计数的答案是88 : why?

javascript - 在 MongoDB 查询和变量范围内使用函数

php - 四舍五入到小数点后第二位