JavaScript:四舍五入为0.5
我遇到的情况是JavaScript函数生成数字,例如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
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);
}