我一直努力讓從PHP移植到Java腳本變化方程的係數,但似乎無法得到它的工作。從PHP轉換數學方程式爲Javascript(jQuery的)
原始PHP腳本:
// define variables, strip spaces
$weights = $_POST['weights'];
// define coefficient of variation function
function cv($array){
$n = 0;
$mean = 0;
$M2 = 0;
foreach($array as $x){
if ($x != NULL AND $x != '') {
$n++;
$delta = $x - $mean;
$mean = $mean + $delta/$n;
$M2 = $M2 + $delta*($x - $mean);
$total = $total + $x;
}
}
return (((sqrt($M2/($n - 1)))/($total/$n))*100);
}
$cv = (cv($weights));
這基本上帶有一個數組,並計算出變異係數爲它。現在,當我嘗試通過一些jQuery函數將其轉換爲Javascript:
var fields = $('#cvform').serializeArray();
var count = 0;
var num = 0;
var mean = 0;
var m2 = 0;
var total = 0;
var delta = 0;
jQuery.each(fields, function(i, field){
if (field.value > 0) {
num++;
delta=(field.value-mean);
mean=(mean+delta/num);
m2=(m2+delta*(field.value-mean));
total=(total+field.value);
};
});
var cov=(((Math.sqrt(m2/(num-1)))/(total/num))*100);
$("<span>Coefficient of Variation: " + cov + "</span>").appendTo('#cvdisplay');
雖然JavaScript函數輸出一個答案,這是不正確的。如果我輸入值「3,3,2,3,3,4」PHP腳本給出21.08的輸出,這是正確的。 javascript函數爲我提供了0.0011418432035849642的值。
任何人都可以指出方程式的不同之處嗎?
有一件事要嘗試:明確地將「field.value」轉換爲一個數字,然後再搞亂它。 'var v = 1 * field.value;'例如。 – Pointy
@Pointy是正確的:http://jsfiddle.net/qvj3U/(如果您將'fields'變量更改爲'var fields = [「3」,「3」,「2」,「3」,「3」 ,「4」];'你得到了錯誤的答案。) – JJJ
據我所知,'serializeArray()'產生字符串值,所以需要浮點/整數轉換 – Tomm