JavaScript:在 0.5 情况下向下舍入

问题描述 投票:0回答:4

我遇到的情况是 JavaScript 函数生成数字,例如

2.5
。 我想让这些五点数字向下舍入为
2
,而不是
Math.round
的结果,在这种情况下它总是向上舍入(忽略奇偶规则),产生 2。有没有更优雅的方法这样做比在四舍五入之前的数字中减去 0.01 更好吗? 谢谢。

javascript decimal rounding
4个回答
26
投票

只需将输入和输出取反即可

Math.round
:

var result = -Math.round(-num);

更详细地说:JavaScript 的

Math.round
具有不寻常的属性,它将中间的情况舍入到正无穷大,无论它们是正数还是负数。例如,
2.5
将舍入为
3.0
,但
-2.5
将舍入为
-2.0
。这是一种不常见的舍入模式:更常见的是,将中间情况舍入到远离零(因此
-2.5
将舍入到
-3.0
)或最接近的偶数。

然而,它确实有一个很好的特性,那就是让它适应向负无穷大舍入的中间情况是微不足道的:如果这就是你想要的,那么你所要做的就是否定输入和输出:

示例:

function RoundHalfDown(num) {
  return -Math.round(-num);
}

document.write("1.5 rounds to ", RoundHalfDown(1.5), "<br>");
document.write("2.5 rounds to ", RoundHalfDown(2.5), "<br>");
document.write("2.4 rounds to ", RoundHalfDown(2.4), "<br>");
document.write("2.6 rounds to ", RoundHalfDown(2.6), "<br>");
document.write("-2.5 rounds to ", RoundHalfDown(-2.5), "<br>");


4
投票

这样做:

var result = (num - Math.floor(num)) > 0.5 ? Math.round(num) : Math.floor(num);

0
投票

您还可以使用此函数进行不带小数部分和 0.5 向下规则的四舍五入(仅限正数):

function customRound(number) {
   var decimalPart = number % 1;
   if (decimalPart === 0.5)
      return number - decimalPart;
   else
      return Math.round(number);
}

对不起我的英语。


-1
投票

另一种方法是使用实数(而不是 0.2 使用 20,0.02 使用 2 等),然后添加 floatPoints 变量来除以结果(在你的情况下是 2)。因此,您可以按 Number/(10^floatingPoints) 进行操作。 该解决方案广泛应用于外汇公司。

© www.soinside.com 2019 - 2024. All rights reserved.