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 参数为一般数字时的执行结果
然后,我们再来看看参数或结果为特殊数字的情况(即上面的第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>
图2 参数或结果为特殊数字时的执行结果
最后,我们再来看看参数不是数字类型的情况,此时的参数会被先自动转换为数字类型;执行结果如图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>
图3 参数需要类型转换时的执行结果
(完)