《JS权威指南学习总结--3.1数字》

3.1数字

内容要点:

  一.数字直接量:当一个数字直接出现在JS程序中,我们称之为数字直接量。

  二.JS中的算术运算

    Math.pow(2,53)      // => 9007199254740992: 2 的 53次幂 

  Math.round(.6)      // => 1.0: 四舍五入 

  Math.ceil(.6)       // => 1.0: 向上求整 
  Math.floor(.6)      // => 0.0: 向下求整 
  Math.abs(-5)      // => 5: 求绝对值 
  Math.max(x,y,z)    // 返回最大值 
  Math.min(x,y,z)     // 返回最小值 
  Math.random()    // 生成一个大于等于0小于1.0的伪随机数 
  Math.PI        // π: 圆周率 
  Math.E        // e: 自然对数的底数 
  Math.sqrt(3)      // 3的平方根 
  Math.pow(3, 1/3)   // 3的立方根 
  Math.sin(0)      // 三角函数: 还有Math.cos, Math.atan等 
  Math.log(10)     // 10的自然对数 
  Math.log(100)/Math.LN10    // 以10为底100的对数 
  Math.log(512)/Math.LN2      // 以2为底512的对数 
  Math.exp(3)             // e的三次幂
 
   JS中日期和时间
   var then = new Date(2011, 0, 1); // 2011年1月1日 
  var later = new Date(2011, 0, 1, 17, 10, 30);// 同一天, 当地时间5:10:30pm, 
  var now = new Date(); // 当前日期和时间 
  var elapsed = now - then; // 日期减法:计算时间间隔的毫秒数 
  later.getFullYear() // => 2011 
  later.getMonth() // => 0: 从0开始计数的月份 
  later.getDate() // => 1: 从1开始计数的天数 
  later.getDay() // => 5: 得到星期几, 0代表星期日,5代表星期一 
  later.getHours() // => 当地时间17: 5pm 
  later.getUTCHours() // 使用UTC表示小时的时间,基于时区 
 
三.二进制浮点数
   
    例如:
    var x = .3-.2;
    var y = .3-.1;

     x==y;         //返回false两个值不相等

     这个问题在任何二进制浮点数的编程语言中都会出现。 

     计算没有问题,但比较两个数的时候需要注意。

四.四舍五入问题和toFixed()方法:

    1.注意toFixed是number方法,下面这个是不能用的

          错误示例:  

           var a=10.005;

                 a.toFixed(2);

                 alert(a);      =>10.005

            需要将其转换为number类型:

          正确示例:

           var a=10.005;

           var num=Number(a).toFixed(2); 

           alert(num);        =>10.01

    2.toFixed(num)里面的num,表示保留小数位后几位小数
 
    3.采用原生的Number对象的原型对象上的toFixed()方法时,
     
          规则并不是所谓的“四舍五入”或者是“四舍六入五成双”,在浮点数末尾≤4或者≥6的情况下的舍入没有争议,但当末尾正好等于5的情况下可谓混乱之极。
 
          例如(chrome和FF):                   

       取两位小数:

          var b=13.005;//13.01
          var c=13.015;//13.02
          var d=13.025;//13.03
          var f=13.035;//13.04

          var g=13.045;//13.04
          var h=13.055;//13.05
          var j=13.065;//13.06
          var k=13.075;//13.07

          var l=13.085;//13.08
          var z=13.095;//13.10
         

          console.log(Number(b).toFixed(2));//13.01
          console.log(Number(c).toFixed(2));//13.02
          console.log(Number(d).toFixed(2));//13.03
          console.log(Number(f).toFixed(2));//13.04
          console.log(Number(g).toFixed(2));//13.04
          console.log(Number(h).toFixed(2));//13.05
          console.log(Number(j).toFixed(2));//13.06
          console.log(Number(k).toFixed(2));//13.07
          console.log(Number(l).toFixed(2));//13.09
          console.log(Number(z).toFixed(2));//13.10

      4.解决方法         

          //重写toFixed方法
          Number.prototype.toFixed=function(len)
          {
            var tempNum = 0;
            var s,temp;
            var s1 = this + "";
            var start = s1.indexOf(".");
           //截取小数点后,0之后的数字,判断是否大于5,如果大于5这入为1
           if(s1.substr(start+len+1,1)>=5)
             tempNum=1;
           //计算10的len次方,把原数字扩大它要保留的小数位数的倍数
           var temp = Math.pow(10,len);
           //求最接近this * temp的最小数字
          //floor() 方法执行的是向下取整计算,它返回的是小于或等于函数参数,并且与之最接近的整数
           s = Math.floor(this * temp) + tempNum;
           return s/temp;
          };

 
 
 
 
 
 
 
 
 
 
 
posted @ 2016-08-12 11:06  承载梦想-韩旭明  阅读(174)  评论(0编辑  收藏  举报