有人可以详细解释这个 JavaScript 小数舍入函数吗?
Can someone please explain this JavaScript decimal rounding function in detail?
function Round2DecimalPlaces(l_amt) {
var l_dblRounded = +(Math.round(l_amt + "e+2") + "e-2");
return l_dblRounded;
}
Fiddle: http://jsfiddle.net/1jf3ut3v/
我主要困惑的是 Math.round 如何与 "e+2" 一起工作,以及在 Math.round 开头添加“+”符号有何不同。
我了解基本的功能;小数点向右移动 n 位(由 e+2 指定),用这个新整数四舍五入,然后向后移动。但是,我不确定 'e' 在这种情况下正在做什么。
eX
是数字文字的有效部分,表示 *10^X
,就像 scientific notation:
> 1e1 // 1 * Math.pow(10, 1)
10
> 1e2 // 1 * Math.pow(10, 2)
100
因此,转换包含此类字符序列的字符串会产生有效数字:
> var x = 2;
> Number(x + "e1")
20
> Number(x + "e2")
200
有关详细信息,请查看 MDN JavaScript Guide。
但是当然,在您的示例中使用这种表示法的方式很糟糕。把值来回转换成数字和字符串已经够糟糕的了,但也更难理解。
简单的倍数或除以 10 的倍数。
单个加号运算符将字符串强制转换为浮点数。 (另请参阅:Single plus operator in javascript)
function Round2DecimalPlaces(l_amt) {
var l_dblRounded = +(Math.round(l_amt + "e+2") + "e-2");
return l_dblRounded;
}
Fiddle: http://jsfiddle.net/1jf3ut3v/
我主要困惑的是 Math.round 如何与 "e+2" 一起工作,以及在 Math.round 开头添加“+”符号有何不同。
我了解基本的功能;小数点向右移动 n 位(由 e+2 指定),用这个新整数四舍五入,然后向后移动。但是,我不确定 'e' 在这种情况下正在做什么。
eX
是数字文字的有效部分,表示 *10^X
,就像 scientific notation:
> 1e1 // 1 * Math.pow(10, 1)
10
> 1e2 // 1 * Math.pow(10, 2)
100
因此,转换包含此类字符序列的字符串会产生有效数字:
> var x = 2;
> Number(x + "e1")
20
> Number(x + "e2")
200
有关详细信息,请查看 MDN JavaScript Guide。
但是当然,在您的示例中使用这种表示法的方式很糟糕。把值来回转换成数字和字符串已经够糟糕的了,但也更难理解。
简单的倍数或除以 10 的倍数。
单个加号运算符将字符串强制转换为浮点数。 (另请参阅:Single plus operator in javascript)