1. 基本概念
Math.round()方法用于将它的参数四舍五入到最接近的整数,如果最接近的整数有两个(此时参数的小数部分为0.5),那么结果就是更接近正无穷的那一个(或者说数值较大的那一个);如果它的参数原本就是整数,那么结果就是该参数自身。
Math.round()方法的语法形式如下所示:
Math.round(x);
根据上面的说明我们可知,参数x应该是一个数字,即Number类型。如果你传递的x不是Number类型的,那么它会先被转换成Number类型,再进行四舍五入。
由于JavaScript数字类型的特殊性,Math.round()的返回值由以下规则详细决定。这些规则中提到的x的值指的是x转换为数字后的值,如果它之前不属于数字类型的话。
1. 如果x是NaN,那么结果也是NaN;
2. 如果x是+0,那么结果也是+0;
3. 如果x是-0,那么结果也是-0;
4. 如果x是正无穷(+Infinity),那么结果也是正无穷;
5. 如果x是负无穷(-Infinity),那么结果也是负无穷;
6. 如果x大于0且小于0.5,那么结果将是+0;
7. 如果x小于0且大于或等于-0.5,那么结果将是-0;
8. 其余情况,结果就是最接近x的整数;如果最接近的整数有两个,那么结果就是更接近于正无穷的那一个;如果x本身就是整数,那么结果就是x本身。
这些规则看似很多,其实原理都是将x舍入到最接近的整数,只是需要考虑NaN、+0、-0、+Infinity和-Infinity这几个特殊值而已。
对于正数,JavaScript通常不显示它的正号。所以,在后面的示例中当我们打印值为+0和+Infinity的结果时,你会看到打印结果为0和Infinity。
2. 示例
首先,我们先来看看参数为一般数字时(即参数属于上面的第8条规则)的情况,此时的执行结果如图1所示。
<script>
var value1 = Math.round(4.3);
console.log("Math.round(4.3):");
console.log(value1);
var value2 = Math.round(18.7);
console.log("\nMath.round(18.7):");
console.log(value2);
var value3 = Math.round(6.5);
console.log("\nMath.round(6.5):");
console.log(value3);
var value4 = Math.round(-9.4);
console.log("\nMath.round(-9.4):");
console.log(value4);
var value5 = Math.round(-25.8);
console.log("\nMath.round(-25.8):");
console.log(value5);
var value6 = Math.round(-21.5);
console.log("\nMath.round(-21.5):");
console.log(value6);
</script>
然后,我们再来看看参数或结果为特殊数字的情况(即上面的第1至第7条规则),它的执行结果如图2所示。
<script>
/* 规则1 */
var value1 = Math.round(NaN);
console.log("Math.round(NaN):");
console.log(value1);
/* 规则2 */
var value2 = Math.round(+0);
console.log("\nMath.round(+0):");
console.log(value2);
/* 规则3 */
var value3 = Math.round(-0);
console.log("\nMath.round(-0):");
console.log(value3);
/* 规则4 */
var value4 = Math.round(+Infinity);
console.log("\nMath.round(+Infinity):");
console.log(value4);
/* 规则5 */
var value5 = Math.round(-Infinity);
console.log("\nMath.round(-Infintiy):");
console.log(value5);
/* 规则6 */
var value6 = Math.round(0.34);
console.log("\nMath.round(0.34):");
console.log(value6);
/* 规则7 */
var value7 = Math.round(-0.34);
console.log("\nMath.round(-0.34):");
console.log(value7);
</script>
最后,我们再来看看参数不是数字类型的情况,此时的参数会被先自动转换为数字类型;执行结果如图3所示。
<script>
/* 字符串"49.25"转换成数字为49.25 */
var value1 = Math.round("49.25");
console.log('Math.round("49.25"):');
console.log(value1);
/* 布尔值true转换成数字为1 */
var value2 = Math.round(true);
console.log("\nMath.round(true):");
console.log(value2);
/* document对象转换成数字为NaN */
var value3 = Math.round(document);
console.log("\nMath.round(document):");
console.log(value3);
/* null转换成数字为+0 */
var value4 = Math.round(null);
console.log("\nMath.round(null):");
console.log(value4);
</script>
(完)