我想将所有数字转换为最接近的.25
因此...
5 becomes 5.00
2.25 becomes 2.25
4 becomes 4.00
3.5 becomes 3.50
由于
答案 0 :(得分:86)
这是rslite所说的实现:
var number = 5.12345;
number = (Math.round(number * 4) / 4).toFixed(2);
答案 1 :(得分:63)
乘以4,舍入为整数,除以4,格式为两位小数。
编辑有什么原因可以进行投票?至少留下评论,知道应该改进什么。
答案 2 :(得分:12)
如果您关心速度,请注意使用以下方法可以提高30%的速度:
var nearest = 4;
var rounded = number + nearest/2 - (number+nearest/2) % nearest;
从我的网站:http://phrogz.net/round-to-nearest-via-modulus-division
此处的效果测试:http://jsperf.com/round-to-nearest
答案 3 :(得分:9)
这是一个进行舍入的通用函数。在上面的例子中,使用了4,因为它与.25相反。此功能允许用户忽略该细节。它目前不支持预设精度,但可以轻松添加。
function roundToNearest(numToRound, numToRoundTo) {
numToRoundTo = 1 / (numToRoundTo);
return Math.round(numToRound * numToRoundTo) / numToRoundTo;
}
答案 4 :(得分:3)
这是@Gumbo的一个函数形式的答案:
var roundNearQtr = function(number) {
return (Math.round(number * 4) / 4).toFixed(2);
};
您现在可以拨打电话:
roundNearQtr(5.12345); // 5.00
roundNearQtr(3.23); // 3.25
roundNearQtr(3.13); // 3.25
roundNearQtr(3.1247); // 3.00
答案 5 :(得分:0)
舍入的非常好的近似值:
function Rounding (number, precision){
var newNumber;
var sNumber = number.toString();
var increase = precision + sNumber.length - sNumber.indexOf('.') + 1;
if (number < 0)
newNumber = (number - 5 * Math.pow(10,-increase));
else
newNumber = (number + 5 * Math.pow(10,-increase));
var multiple = Math.pow(10,precision);
return Math.round(newNumber * multiple)/multiple;
}
答案 6 :(得分:0)
使用以下功能,希望有所帮助
function roundByQuarter(value) {
var inv = 1.0 / 0.25;
return Math.round(value * inv) / inv;
}
调用该函数如下,将得到最接近的Quarter值,即它不会返回.32,.89,.56但仅返回.25,.75,.50小数。
roundByQuarter(2.74) = 2.75
roundByQuarter(2.34) = 2.25
roundByQuarter(2.94) = 3.00
roundByQuarter(2.24) = 2.25
答案 7 :(得分:0)
function roundToInc(num, inc) {
const diff = num % inc;
return diff>inc/2?(num-diff+inc):num-diff;
}
> roundToInc(233223.2342343, 0.01)
233223.23
> roundToInc(505, 5)
505
> roundToInc(507, 5)
505
> roundToInc(508, 5)
510