PHP程序员站--PHP编程开发平台
 当前位置:主页 >> 网页制作 >> Javascript >> 

JavaScript进行数学运算:Math对象

JavaScript进行数学运算:Math对象

来源:phperz.com  作者:phper  发布时间:2012-05-03
在使用数字时,除了简单的加、减、乘、除运算外,还经常要用到复杂的数学函数,如三角函数、平方根运算等,在JavaScript中这些函数作为Math对象的方法提供。在数学运算中还经常用到一些常数,如欧拉常数、圆周率等,这些常数作为Math对象的属性提供。 Math对象是JavaSc

在使用数字时,除了简单的加、减、乘、除运算外,还经常要用到复杂的数学函数,如三角函数、平方根运算等,在JavaScript中这些函数作为Math对象的方法提供。在数学运算中还经常用到一些常数,如欧拉常数、圆周率等,这些常数作为Math对象的属性提供。

Math对象是JavaScript中的一个全局对象,不需要由函数进行创建,而且只有一个。为了便于大家使用,表6.4和表6.5分别列出了Math对象的属性和方法。

表6.4                                                            Math对象的属性

使 用 语 法

描    述

Math.E

欧拉常数(e)

Math.LN2

2的自然对数

Math.LN10

10的自然对数

Math.LOG2E

以2为底e的对数

Math.LOG10E

以10为底e的对数

Math.PI

圆周率π

Math.SQRT1_2

1/2的平方根

Math.SQRT2

2的平方根

表6.5                                                            Math对象的方法

使 用 语 法

描    述

Math.abs(x)

返回x的绝对值

Math.acos(x)

返回x的反余弦,x介于-1和1之间,返回值介于0和π之间

Math.asin(x)

返回x的反正弦,x介于-1和1之间,返回值介于-π/2和π/2之间

Math.atan(x)

返回x的反正切,返回值介于-π/2和π/2之间

Math.atan2(y,x)

返回y/x的反正切,这里的(x,y)是笛卡儿坐标值,返回值介于-π/2和π/2之间

Math.ceil(x)

返回大于等于x的最小整数

Math.cos(x)

返回x的余弦

Math.exp(x)

返回E的x次幂

Math.floor(x)

返回小于等于x的最大整数

Math.log(x)

返回x的自然对数(以e为底)

Math.max(value1,value2,…,valueN)

返回参数列表中最大的一个值

Math.min(value1,value2,…,valueN)

返回参数列表中最小的一个值

Math.pow(x,y)

幂运算,返回以x为底,y为指数的幂

Math.random()

返回一个0到1之间的随机小数,例如“0.47306810457174553”

Math.round(x)

将一个小数四舍五入为整数,例如:Math.round(3.5)返回4,但Math.round(-3.5)返回-3

续表

使 用 语 法

描    述

Math.sin(x)

返回x的正弦值

Math.sqrt(x)

返回x的平方根,x必须大于0

Math.tan(x)

返回x的正切,x以弧度表示

通过Math对象属性和方法,可以完成各种类型的数学运算,本节将通过两个例子,详细说明它们的用法。

6.3.1 将一个小数四舍五入到指定位数

Math对象提供了一个进行四舍五入计算的函数:Math.round(x),实际上它等价于Math.floor(x+0.5)。但round函数仅能够将小数四舍五入为整数,而在实际开发中,经常需要四舍五入到指定位数,例如:金额信息通常需要保留两位小数。

要实现这个功能可用如下思想:将原有小数扩到10的指定次方倍数,再四舍五入,最后将小数恢复到原来的数量级。光盘文件6.4.htm实现了这种函数,代码如下。

<script language="JavaScript" type="text/javascript">

<!--

function roundTmp(x,y){

      var _pow=Math.pow(10,y);

      x*=_pow;

      x=Math.round(x);

      return x/_pow;

}

alert(roundTmp (56.456345654,2));

//-->

</script>

代码的最后,以“56.456345654”四舍五入到第2位小数为例说明了函数的执行,输出结果为 “56.46”。函数的执行过程为,56.456345654先被乘以100(10的2次方),得到5645.6345654。再对它调用 Math.round()函数进行四舍五入,得到5645.63,最后将这个数除以100,就得到了需要的结果。

6.3.2 使用随机函数Math.random()

随机函数可以返回一个0~1之间的小数,通过一定的处理可以用来返回各种形式的随机数,例如:Math.round(Math.random()*100),就返回一个0~100之间的随机整数;Math.round(Math.random()*100)+100,则返回100~200之间的随机整数。返回指定上限和下限随机整数的通用形式如下:

Math.round(Math.random()*elementsCount)+lowerBound

这里elementsCount表示要产生的随机整数的数目,lowerBound表示整数范围的下限。如果要在一个数组中随机取一个值,这种用法很常用。

在概率统计问题上也经常会用到随机数,同样可以使用Math.random()解决。例如一根木棒随机折成三段,它们能组成一个三角形的概率是多少?用概率论固然可以解答这个问题,但有时不能确定得到的答案是否正确。这时用JavaScript来模拟并得到近似答案,这样就可以验证答案是否正确了。

求解过程就是使用JavaScript不断模拟将一根木棒随机折成三段,看它们是否能组成三角形,最后用能组成三角形的次数除以总的次数,得到最终的结果。模拟的次数越多,得到的结果就越精确。

在实现过程中有两个需要考虑的核心问题,下面分别列出并解决:

(1)如何模拟木棒的折断。木棒的长度固定,可以假设其为l,而折成3段只需两个断点,因此执行两次Math.random()来得到断点的位置,这样就将木棒随机分为了三段,可以很容易获取每一段的长度。而模拟的次数则很容易通过for循环进行控制。

(2)如何判断是否能组成三角形。三角形的一个重要性质就是“两边之和大于第三边”。所以只要较短的两段大于第三段即可。在这个例子中,只要有一段的长度超过了0.5就说明不能组成三角形。

解决了上述两个问题,下面给出代码实现:

<script language="JavaScript" type="text/javascript">

<!--

var totalCount=10000;

var okCount=0;

for(var i=0;i<totalCount;i++){

      var duan1=Math.random();           //得到第一个断点

      var duan2=Math.random();           //得到第二个断点

      var l1=Math.min(duan1, duan2);     //得到第一段长度

      var l2=Math.max(duan1, duan2)-l1; //得到第二段长度

      var l3=1-l1-l2;                        //得到第三段长度

      if(l1>=0.5 || l2>=0.5 || l3>=0.5)

          continue;                      //只要有一边长超过0.5,说明不能组成三角形

     okCount++;

}

alert(okCount/totalCount);

//-->

</script>

通过改变totalCount的值,可以很容易改变模拟执行的次数,模拟执行10000次得到的结果是0.2536,可见其概率约为1/4。事实上,通过概率论计算得到的精确结果正是1/4。尽管计算机模拟不能得到精确的结果,但它可以辅助验证理论结果的正确性。


延伸阅读:
PHP+MySQL应用中使用XOR运算加密算法
JavaScript教程:实例解析运算符(==号)
php三元运算符:?(问号)和:(冒号)使用方法
smarty运算符大全
SMARTY中的数字运算用法
详解php位运算
Tags: javascript   数学运算   Math  
最新文章
推荐阅读
月点击排行榜
PHP程序员站 Copyright © 2007-2010,PHPERZ.COM All Rights Reserved 粤ICP备07503606号