JavaScript:四舍五入为0.5

JavaScript:四舍五入为0.5,javascript,decimal,rounding,Javascript,Decimal,Rounding,我遇到的情况是JavaScript函数生成数字,例如2.5。我想把这五个点的数字四舍五入到2,而不是Math.round的结果,在这种情况下,它总是四舍五入(忽略奇偶规则),生成2。有没有比四舍五入前从数字中减去0.01更优雅的方法?谢谢 这样做: var result = (num - Math.Floor(num)) > 0.5 ? Math.Round(num):Math.Floor(num); 另一种方法是使用实数(而不是0.2使用20,0.02使用2等),然后添加floatin

我遇到的情况是JavaScript函数生成数字,例如
2.5
。我想把这五个点的数字四舍五入到
2
,而不是
Math.round
的结果,在这种情况下,它总是四舍五入(忽略奇偶规则),生成2。有没有比四舍五入前从数字中减去0.01更优雅的方法?谢谢

这样做:

var result = (num - Math.Floor(num)) > 0.5 ? Math.Round(num):Math.Floor(num);

另一种方法是使用实数(而不是0.2使用20,0.02使用2等),然后添加floatingPoints变量来分割结果(在您的例子中是2)。因此,您可以作为数字/(10^浮点数)进行操作。
此解决方案在外汇公司中广泛使用。

只需将输入和输出求反到
Math.round

var result = -Math.round(-num);
更详细地说:JavaScript的
Math.round
有一个不寻常的特性,即它向正无穷方向舍入了一半的情况,而不管它们是正的还是负的。因此,例如
2.5
将舍入
3.0
,但是
-2.5
将舍入
-2.0
。这是一种不常见的四舍五入模式:通常情况下,将一半的情况舍入为零(因此
-2.5
将舍入为
-3.0
),或者舍入为最接近的偶数整数

然而,它确实有一个很好的特性,那就是将它改为向负无穷大取整一半是很简单的:如果这是你想要的,那么你所要做的就是对输入和输出都取反:

例如:

函数舍入下半时(num){
return-Math.round(-num);
}
记录。写下(“1.5轮到”,舍入下半部分(1.5),“
”; 记录。写下(“2.5轮到”,舍入下半部分(2.5),“
”; 记录。写下(“2.4轮到”,舍入下半部分(2.4),“
”; 记录。写下(“2.6轮到”,舍入下半部分(2.6),“
”;
文件。写(“-2.5轮到”,舍入下半部分(-2.5),“
您还可以使用此函数进行四舍五入,无小数部分和.5向下规则(仅限正数):


对不起,我的英语不好。

如果你在做“银行”数学,那么使用二进制浮点系统是一个根本性的错误。如果你想做一个简单的计算,这可能会有所帮助:在进行除法运算时,仍然有(很好的)出错机会。这不是OP想要的。他们需要一个函数,根据值自动决定是向上取整还是向下取整。我认为这个解决方案不再有效。其他人也可以检查吗?“运行代码片段”按钮仍然会产生我期望的结果(Safari、macOS)。你能详细说明什么部分不适合你吗?
function customRound(number) {
   var decimalPart = number % 1;
   if (decimalPart === 0.5)
      return number - decimalPart;
   else
      return Math.round(number);
}