2017-08-02 72 views
3
var number = 0.08; 
var newNumber = Math.round(number * 4)/4 //round to nearest .25 

隨着上面的代碼我可以圓到最接近.25。不過,我只希望它圓滿。由此:數學圓只有季度

0.08 = 0.25 
0.22 = 0.25 
0.25 = 0.25 
0.28 = 0.5 

這怎麼可能?

+0

你只會處理高達2DP的數字嗎? – Toastrackenigma

回答

6

你實際上想要做的是取得輸入的天花板,但不是在整數上運行,而是希望它在宿舍上運行。我們在這裏可以使用的一個技巧是將輸入乘以4以使其達到一個整數,然後將其用於JavaScript的Math.ceil()函數。最後,將結果除以4以使其恢復到其邏輯上的原始開始。

使用這個公式:

Math.ceil(4 * num)/4 

演示在這裏:

Rextester

0

用戶Math.ceil()功能圍捕一些。

Math.floor() - 圓整。

var number = 0.08; 
var newNumber = Math.ceil($scope.newAmt * 4)/4 //round to nearest .25 
1

你可能希望我們Math.ceil()

ceil()輪數向上其最接近的整數。

console.log(Math.ceil(0.08 * 4)/4); // 0.25 
 
console.log(Math.ceil(0.22 * 4)/4); // 0.25 
 
console.log(Math.ceil(0.25 * 4)/4); // 0.25 
 
console.log(Math.ceil(0.28 * 4)/4); // 0.5

1

添Biegeleisen具有絕對是最好的答案,但如果你想要一個更「簡單」的方法,你基本上可以只寫你自己的函數,是這樣的:

var round = (num) => { 
    if (num <= 0.25) { 
     return 0.25; 
    } else if (num > 0.25 && num <= 0.5) { 
     return 0.5; 
    } else if (num > 0.5 && num <= 0.75) { 
     return 0.75; 
    } else if (num > 0.75 && num <= 1.0) { 
     return 1.0; 
    } else { 
     return null; 
    } 
}; 

當被調用時它將重現你想要的結果:

round(0.08); // 0.25 
round(0.22); // 0.25 
round(0.25); // 0.25 
round(0.28); // 0.5 
+0

你拼錯了我的名字,但這值得讚揚+1 –

+0

道歉,糾正它:) –

0

最大的問題是你使用

Math.round($scope.newAmt * 4)/4 

這將始終一輪的基礎上取整,因爲我們知道它的標準方式。你可以使用

Math.ceil($scope.newAmt * 4)/4 

因爲這將總是四捨五入。這是下舍入兄弟是

Math.floor() 

順便說一句。