2016-11-06 65 views
0

我嘗試了幾乎所有的東西,但似乎沒有得到最終結果,因爲一個循環數最多爲2個十進制數字。這是一個標準差Javascript:不能得到一個整數

先謝謝您,這裏是代碼。

function round(number) { 
    var final = Math.round(number * 100)/100; 
    return final; 
} 
function stdev(arr) { 
    var avg = average(arr); 
    var squareDiff = arr.map(function(arr) { 
    var diff = arr - avg; 
    var sqrDiff = diff * diff; 
    return sqrDiff; 
    }); 
    var avgSquareDiff = average(squareDiff); 
    var stdDev = Math.sqrt(avgSquareDiff); 
    return stdDev; 
    function average(data) { 
    var sum = data.reduce(function(sum, arr) { 
     return sum + arr; 
    }, 0); 
    return round(sum/data.length); 
    } 
} 
+1

嘗試.toFixed(2),這可能是對你有所幫助https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed – Geeky

+0

http://stackoverflow.com/questions/11832914/round-to-at-most-2-decimal-places-in-javascript這可能適合你,但我不完全確定是否這樣是你需要的。 – CristianHG

回答

2

當您在average中返回時,您將該值舍入。

但是,在stdev中,則計算該舍入值的平方根。

該操作很可能會返回一個有很多小數的數字,並且您直接返回而不會再次舍入它。

最可能的是,你需要

function round(number) { 
    var final = Math.round(number * 100)/100; 
    return final; 
} 
function average(data) { 
    var sum = data.reduce(function(sum, arr) { 
    return sum + arr; 
    }, 0); 
    return sum/data.length; 
} 
function stdev(arr) { 
    var avg = average(arr); 
    var squareDiff = arr.map(function(arr) { 
    var diff = arr - avg; 
    var sqrDiff = diff * diff; 
    return sqrDiff; 
    }); 
    var avgSquareDiff = average(squareDiff); 
    var stdDev = Math.sqrt(avgSquareDiff); 
    return round(stdDev); 
} 
+0

感謝,似乎工作,只是一個問題,我有一些吊裝問題,我得到這個錯誤:'平均'之前使用它被定義 – sal

+0

在你的代碼中,你定義它之前使用'平均',但它沒關係由於起重。在我的代碼中,在定義它之前我不使用'average'。 – Oriol