Javascript 舍入数到最接近的 0.5

IT技术 javascript
2021-02-12 08:01:34


有人可以告诉我如何将数字四舍五入到最接近的 0.5。
我必须根据屏幕分辨率缩放网页中的元素,为此我只能将 pts 中的字体大小指定为 1、1.5 或 2 等。

如果我四舍五入,则四舍五入到小数点后 1 位或无。我怎样才能完成这项工作?

6个回答

编写自己的函数,乘以 2,舍入,然后除以 2,例如

function roundHalf(num) {
    return Math.round(num*2)/2;
}
对 num*2 进行四舍五入并不适用于所有情况..尝试任何小数,如 15.27 => 使用您的公式将给出 => 15,而实际上它应该返回 15.5。**** 我认为使用 toFixed 会更好 (num*2).toFixed()/2
2021-03-18 08:01:34
如果你想最终得到 13.0 或 13.5,我将你的答案与下面的答案结合起来:function roundHalf(num) { return (Math.round(num*2)/2).toFixed(1); }
2021-03-24 08:01:34
只是用它来清理货币值的减少函数,该函数返回了 9 个小数点...... (num*100)/100 工作得很好。
2021-03-29 08:01:34
@sfdxbomb 你检查过这个吗?在我浏览器的控制台中roundHalf(15.27)返回 15.5
2021-04-11 08:01:34

这是一个更通用的解决方案,可能对您有用:

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

@Deilan 我猜inverse
2021-03-25 08:01:34
什么inv意思?什么是inv变量代表?
2021-03-30 08:01:34

只是上述所有答案的精简版:

Math.round(valueToRound / 0.5) * 0.5;

通用的:

Math.round(valueToRound / step) * step;

扩展 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;
}
是的,刚刚验证。Math.ceil(-1.75) == -1Math.floor(-1.75) == -2因此,对于任何被此绊倒的人,只需将其视为ceil返回大于数字,floor返回小于数字即可。
2021-03-22 08:01:34
@Yuri 为了扩展您所说的内容,round四舍五入到大于给定值的下一个整数,就负数而言,该整数将朝向正整数谱。-2.5 会变成 -2。那是对的吗?
2021-04-01 08:01:34