Я хочу преобразовать все числа в ближайшее .25
Итак...
5 becomes 5.00
2.25 becomes 2.25
4 becomes 4.00
3.5 becomes 3.50
Спасибо
Я хочу преобразовать все числа в ближайшее .25
Итак...
5 becomes 5.00
2.25 becomes 2.25
4 becomes 4.00
3.5 becomes 3.50
Спасибо
Вот что говорит rslite:
var number = 5.12345;
number = (Math.round(number * 4) / 4).toFixed(2);
Умножьте на 4, округлите до целого числа, разделите на 4 и отформатируйте с двумя десятичными знаками.
Изменить Любая причина для downvotes? По крайней мере оставить комментарий, чтобы узнать, что следует улучшить.
Если вам нужна ваша скорость, обратите внимание, что вы можете получить около 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
Вот общая функция для округления. В приведенных выше примерах использовалось 4, потому что оно обратное к .25. Эта функция позволяет пользователю игнорировать эту деталь. В настоящее время он не поддерживает предустановленную точность, но может быть легко добавлен.
function roundToNearest(numToRound, numToRoundTo) {
numToRoundTo = 1 / (numToRoundTo);
return Math.round(numToRound * numToRoundTo) / numToRoundTo;
}
Вот ответ @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
Очень хорошее приближение для округления:
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;
}
Используйте функцию ниже, надейтесь, что она поможет
function roundByQuarter(value) {
var inv = 1.0 / 0.25;
return Math.round(value * inv) / inv;
}
Вызвать функцию, как показано ниже, приведет к ближайшему значению Quarter, то есть оно не вернется .32,.89,.56, но вернет только 0,25,.75,.50 десятичных знаков.
roundByQuarter(2.74) = 2.75
roundByQuarter(2.34) = 2.25
roundByQuarter(2.94) = 3.00
roundByQuarter(2.24) = 2.25
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