我所处的情况是,JavaScript函数生成数字,例如2.5。我想让这五个数字四舍五入到2,而不是Math.round的结果,在这种情况下,Math.round总是会聚集起来(忽略了奇偶规则),从而产生2。有什么比在舍入前从数字中减去0.01更优雅的方法吗?谢谢。
发布于 2016-03-06 13:12:04
只需否定输入和输出到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>");
发布于 2016-03-06 01:03:15
这样做:
var result = (num - Math.Floor(num)) > 0.5 ? Math.Round(num):Math.Floor(num);发布于 2016-03-06 01:06:53
另一种方法是使用实数(而不是0.2,使用20,0.02使用2等),然后添加floatingPoints变量来除以结果(在您的例子中是2)。因此,您可以作为Number/(10^floatingPoints)进行操作。这一解决方案广泛适用于外汇公司。
https://stackoverflow.com/questions/35821815
复制相似问题