.toFixed()将值设置为零

时间:2013-12-17 02:05:28

标签: javascript jquery

我正在研究一个简单的计算器/转换器。它采用像素值并将它们变成相对于彼此的比率值。

基本上,我创建一个带有输入值的数组,找到所有值的总和,将每个值除以总数,然后再除以最小值,然后在右侧打印出来。

问题是,一切看起来都很完美,但在最后一个for循环中,当我使用.toFixed()将数字四舍五入到一个合理的小数位时,所有数字都显示为0.00。我在执行数学运算后使用了console.log来测试数字,这是正确的。但它们是疯狂的巨大小数。所以我需要减少它们。

如果它有帮助,这就是它的样子。calculator UI

这是我的代码:

HTML:

<div class="input-grid">
            <div class="input-row">
                <div class="input-box"><input type="text"><span class="input-unit">px</span></div>
                <i class="fa fa-chevron-right"></i>
                <span class="input-response">1.541</span>
            </div>
            <div class="input-row">
                <div class="input-box"><input type="text"><span class="input-unit">px</span></div>
                <i class="fa fa-chevron-right"></i>
                <span class="input-response">1.542</span>
            </div>
            <div class="input-row">
                <div class="input-box"><input type="text"><span class="input-unit">px</span></div>
                <i class="fa fa-chevron-right"></i>
                <span class="input-response">1.543</span>
            </div>
            <div class="input-row">
                <div class="input-box"><input type="text"><span class="input-unit">px</span></div>
                <i class="fa fa-chevron-right"></i>
                <span class="input-response">1.544</span>
            </div>
        </div>
        <div class="btn-wrap">
        <span class="calc-btn">calculate</span>
        <span class="reset-btn">reset</span>
        </div>

JS

$('.calc-btn').click(function(){

var inputs = [];
var total = 0;
    //put input values into an array

    $('.input-box input').each(function(){

        inputs.push($(this).val());
        total = total + ($(this).val());

    });

    //find the lowest value
    var minValue = Math.min.apply(Math,inputs); // get minimum value in array

    //calculation part
    for (i = 0; i < inputs.length; i++) {
           inputs[i] = ((inputs[i] / total) * 10)/ minValue;
    //the problem
           inputs[i] = inputs[i].toFixed(3);

    }
      //print answers
        $('span.input-response').each(function(i){
            $(this).text(inputs[i]);

         });

});

知道为什么会发生这种情况,我该怎么做才能解决这个问题?

3 个答案:

答案 0 :(得分:2)

我认为您需要先使用parseFloat()将值转换为数字:

var num = parseFloat($(this).val());

inputs.push(num);
total = total + num;

否则,当您设置total时,您只是连接一个字符串,这将成为一个非常大的数字。然后,当您除以总计时,您会得到一个非常小的数字,当您拨打0.000时,该数字始终为toFixed()

答案 1 :(得分:1)

由于toFixed()返回数字的字符串表示形式 - 尝试使用parseFloat()进行显式转换。

您可以在toFixed

了解更多信息

答案 2 :(得分:1)

你的代码是正确的,输入数组的值可能是小的