Ответ 1
Напишите свою собственную функцию, которая умножается на 2, раунды, а затем делит на 2, например.
function roundHalf(num) {
return Math.round(num*2)/2;
}
Может кто-нибудь дать мне идею, как я могу округлить число до ближайшего 0.5.
Я должен масштабировать элементы на веб-странице в соответствии с разрешением экрана, и для этого я могу назначать только размер шрифта в очках до 1, 1,5 или 2 и далее и т.д.
Если я округлю его, округлите до 1 десятичного места или ни одного. Как я могу выполнить эту работу?
Напишите свою собственную функцию, которая умножается на 2, раунды, а затем делит на 2, например.
function roundHalf(num) {
return Math.round(num*2)/2;
}
Вот более общее решение, которое может быть вам полезно:
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.7
round(2.74, 0.25)
= 2,75
round(2.74, 0.5)
= 2,5
round(2.74, 1.0)
= 3.0
Math.round(-0.5)
возвращает 0, но он должен быть -1 в соответствии с математическими правилами.
Дополнительная информация: Math.round() и Number.prototype.toFixed()
function round(number) {
var value = (number * 2).toFixed() / 2;
return value;
}
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 );
Расширить верхний ответ ньютроном для округления более чем на 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