Может кто-нибудь подскажет, как мне округлить число до 0,5?
Мне нужно масштабировать элементы на веб-странице в соответствии с разрешением экрана, и для этого я могу назначить размер шрифта в пунктах только 1, 1,5 или 2 и далее и т. Д.
Если я округлю, он округлится либо до 1 десятичного знака, либо до нуля. Как я могу выполнить эту работу?
javascript
Johnydep
источник
источник
roundHalf(15.27)
возвращается значение 15.5Вот более общее решение, которое может быть вам полезно:
function round(value, step) { step || (step = 1.0); var inv = 1.0 / step; return Math.round(value * inv) / inv; }
round(2.74, 0.1)
= 2,7round(2.74, 0.25)
= 2,75round(2.74, 0.5)
= 2,5round(2.74, 1.0)
= 3,0источник
inv
значит? Что представляет собойinv
переменная?inverse
.Чтобы расширить верхний ответ Newtron для округления более чем на 0,5
function roundByNum(num, rounder) { var multiplier = 1/(rounder||0.5); return Math.round(num*multiplier)/multiplier; } console.log(roundByNum(74.67)); //expected output 74.5 console.log(roundByNum(74.67, 0.25)); //expected output 74.75 console.log(roundByNum(74.67, 4)); //expected output 76
источник
Math.round(-0.5)
возвращает 0 , но согласно математическим правилам он должен быть -1 .Дополнительная информация: Math.round () и Number.prototype.toFixed ()
function round(number) { var value = (number * 2).toFixed() / 2; return value; }
источник
round
округляется до следующего целого числа, большего заданного значения, что в терминах отрицательных чисел будет в сторону положительного целочисленного спектра. -2,5 пошел бы на -2. Это верно?Math.ceil(-1.75) == -1
иMath.floor(-1.75) == -2
. Так что для всех, кого это сбивает с толку, просто представьте, что этоceil
возвращает больше числа,floor
возвращает меньше числа.Просто урезанная версия всех приведенных выше ответов:
Math.round(valueToRound / 0.5) * 0.5;
Универсальный:
источник
function roundToTheHalfDollar(inputValue){ var percentile = Math.round((Math.round(inputValue*Math.pow(10,2))/Math.pow(10,2)-parseFloat(Math.trunc(inputValue)))*100) var outputValue = (0.5 * (percentile >= 25 ? 1 : 0)) + (0.5 * (percentile >= 75 ? 1 : 0)) return Math.trunc(inputValue) + outputValue }
Я написал это до того, как увидел лучший ответ Тунаки;)
источник
var f = 2.6; var v = Math.floor(f) + ( Math.round( (f - Math.floor(f)) ) ? 0.5 : 0.0 );
источник