2011-11-10 4 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; 

sumavgparseFloat와 18518.5하지 1.

랩의 모든 avg 데이터가 될 것입니다 :

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

작품 멋지네요을. –

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

훌륭합니다. 고맙습니다. –

관련 문제