2011-11-10 33 views
0

我有一個腳本,根據輸入框設置轉換率(正常工作),但我現在想要得到這些利率的平均值。Javascript,試圖獲得平均轉換

我的代碼是

var avg1 = $('#conversion1').text(); 
var avg2 = $('#conversion2').text(); 
var avg3 = $('#conversion3').text(); 
var avg4 = $('#conversion4').text(); 
var avg5 = $('#conversion5').text(); 
var avg6 = $('#conversion6').text(); 
var sumavg = (avg1 + avg2 + avg3 + avg4 + avg5 + avg6)/6; 
sumavg = Math.round(sumavg*Math.pow(10,2))/Math.pow(10,2); 
$('#conversion7').html(sumavg); 

的ID conversion1,2等具有0-100號(轉化率)。然而每當我運行這個腳本時,我都會得到各種瘋狂的數字(sumavg或id conversion7)。我不知道爲什麼!我還應該注意到,這一點代碼是在每天進行轉換的函數內部正常工作的。

請參閱以下整個片段:

// Conversion Rate 

$.fn.sumConv = function(customers) { 
var sum = 0; 
var val = 0 
this.each(function() { 
    if ($(this).is(':input')) { 
     val = $(this).val(); 
    } else { 
     val = $(this).text(); 
    } 
    customersval = $(customers).val(); 
    sum = (customersval/val) * 100; 

    //sum += parseFloat(('0' + val).replace(/[^0-9-\.]/g, ''), 10); 
    sum = Math.round(sum*Math.pow(10,2))/Math.pow(10,2); 
    if(sum=="Infinity" || sum=="NaN") sum=0; 

}); 
    // do average 
var avg1 = $('#conversion1').text(); 
var avg2 = $('#conversion2').text(); 
var avg3 = $('#conversion3').text(); 
var avg4 = $('#conversion4').text(); 
var avg5 = $('#conversion5').text(); 
var avg6 = $('#conversion6').text(); 
var sumavg = (avg1 + avg2 + avg3 + avg4 + avg5 + avg6)/6; 
sumavg = Math.round(sumavg*Math.pow(10,2))/Math.pow(10,2); 
$('#conversion7').html(sumavg); 
return sum; 
    }; 

$('input#foot1').bind('keyup', function() { 
    $('#conversion1').html($('input#foot1').sumConv('input#customers1')); 
}); 
$('input#customers1').bind('keyup', function() { 
    $('#conversion1').html($('input#foot1').sumConv('input#customers1')); 
}); 
$('input#foot2').bind('keyup', function() { 
    $('#conversion2').html($('input#foot2').sumConv('input#customers2')); 
}); 
$('input#customers2').bind('keyup', function() { 
    $('#conversion2').html($('input#foot2').sumConv('input#customers2')); 
}); 
$('input#foot3').bind('keyup', function() { 
    $('#conversion3').html($('input#foot3').sumConv('input#customers3')); 
}); 
$('input#customers3').bind('keyup', function() { 
    $('#conversion3').html($('input#foot3').sumConv('input#customers3')); 
}); 
$('input#foot4').bind('keyup', function() { 
    $('#conversion4').html($('input#foot4').sumConv('input#customers4')); 
}); 
$('input#customers4').bind('keyup', function() { 
    $('#conversion4').html($('input#foot4').sumConv('input#customers4')); 
}); 
$('input#foot5').bind('keyup', function() { 
    $('#conversion5').html($('input#foot5').sumConv('input#customers5')); 
}); 
$('input#customers5').bind('keyup', function() { 
    $('#conversion5').html($('input#foot5').sumConv('input#customers5')); 
}); 
$('input#foot6').bind('keyup', function() { 
    $('#conversion6').html($('input#foot6').sumConv('input#customers6')); 
}); 
$('input#customers6').bind('keyup', function() { 
    $('#conversion6').html($('input#foot6').sumConv('input#customers6')); 
}); 

回答

0

我想你必須申請parseFloat您的數據。 text方法返回字符串,不是數字。在簡單的例子看看:

var avg1 = "1"; 
var avg2 = "1"; 
var avg3 = "1"; 
var avg4 = "1"; 
var avg5 = "1"; 
var avg6 = "1"; 
var sumavg = (avg1 + avg2 + avg3 + avg4 + avg5 + avg6)/6; 

sumavg將18518.5而不是1

包裝所有avg數據與parseFloat

var avgN = parseFloat($('#conversionN').text()); 
+0

作品Great.Thank你。 –

0

你重複了很多代碼,所以我建議採用DRY技術來儘量減少 - 例如使bindKeyUp函數...

無論如何,你需要數字。 .text()返回字符串。例如。 "99" + "77" === "9977"。這是你的瘋狂數字可能來自哪裏。試試這個:

var avg1 = ~~$('#conversion1').text(); 
var avg2 = ~~$('#conversion2').text(); 
// repeat 

~~其操作數只轉換爲數字(和地板也向0)。 More info

或者,使其更清晰,使用parseFloat

var avg1 = parseFloat($('#conversion1').text()); 
var avg2 = parseFloat($('#conversion2').text()); 
// repeat 
+0

很好,謝謝。 –