我正在研究一个简单的计算器/转换器。它采用像素值并将它们变成相对于彼此的比率值。
基本上,我创建一个带有输入值的数组,找到所有值的总和,将每个值除以总数,然后再除以最小值,然后在右侧打印出来。
问题是,一切看起来都很完美,但在最后一个for循环中,当我使用.toFixed()将数字四舍五入到一个合理的小数位时,所有数字都显示为0.00。我在执行数学运算后使用了console.log来测试数字,这是正确的。但它们是疯狂的巨大小数。所以我需要减少它们。
如果它有帮助,这就是它的样子。
这是我的代码:
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]);
});
});
知道为什么会发生这种情况,我该怎么做才能解决这个问题?
答案 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)
你的代码是正确的,输入数组的值可能是小的