文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>关于JScript的四舍五入

关于JScript的四舍五入

时间:2006-08-17  来源:xmankan

今天有同事把我以前写的一个JScript四舍五入函数拿过来用的时候发现了N多Bugs,于是让我重新写一下,关于此事的主题就成了此文。因为太初级了,但是水平就这点了。           我想要把JScript中关于四舍五入的话题说一遍得花很长时间。所以只讨论其中的一小部分。网上的函数有很多,但是我要先把自己的未审核的代码贴出来,希望能得到一点评论。特别需要注意的是,有时候传入roundNumber的参数num会是object对象,故没有indexOf方法,所以在处理前要用一下toString。   function addZero(num, digit)
{//添零函数,方便处理
  for (i = 0; i < digit; i++)
  {
    num = num.concat("0");
  }
  return num;
}
  function roundNumber(num, digit)
{
  //排除参数异常的可能
  if (digit < 0)
  {
    digit = 0;
  }
  digit = parseInt(digit);
    //将object的num转换为string,否则不能对其调用indexOf方法。
  num = num.toString();
    //获得小数点的位置
  var pos = num.indexOf('.');
  if (pos == -1)
  {
    pos = num.length;
    num = num + ".";
  }
    //添零
  num = addZero(num, digit);
  if (parseInt(num.charAt(parseInt(pos) + parseInt(digit) + 1)) > 4)
  {
    //需要进位
    //num = (parseFloat(num.substring(0, parseInt(pos) + parseInt(digit) + 1))
    //    + 1/Math.pow(10, digit)).toString();     num = (parseFloat(num) + 1/Math.pow(10, digit)).toString();       //进位可能导致小数点丢失或移动
    pos = num.indexOf('.');
    if (pos == -1)
    {
      pos = num.length;
      num = num + ".";
    }
    num = addZero(num, digit);
  }
  num = num.substring(0, parseInt(pos) + parseInt(digit) + 1);
    if (digit == 0)
  {//去掉末尾小数点
    num = parseFloat(num);
  }
  return num;
}
          这个函数还很脆弱,不容有一点压力的参数传入。但是它将对进位的处理转化为只处理单位,对整个数字的处理转化为对字符串的处理。其它网上的一些代码都用到了round(number)方法,我没有使用,但在第一次写的函数中用到了,如下:   function roundNumber(num, digit)
{
  var str = Math.round(num * Math.pow(10, digit)).toString();
  var temp = str.substring(0, str.length - digit) + "."
    + str.substr(str.length - digit);
  if (temp.lastIndexOf('\.') == temp.length - 1)
  {
    temp = temp.substring(0,temp.length - 1);
  }
  return temp;
}
          这个函数对位数应该是有限制的,而且基本不能使用。   Following appended by Ken#2006-09-15 今天无意间发现了一个惊人的结果,与下句有关: num = (parseFloat(num.substring(0, parseInt(pos) + parseInt(digit) + 1))         + 1/Math.pow(10, digit)).toString(); 现以修改为 num = (parseFloat(num)) + 1/Math.pow(10, digit)).toString(); 具体原因稍候详述。 同时还有个JS的小数乘除法的问题,也许要讨论研究。会在下面链接有所反映: http://blog.chinaunix.net/u/22676/showart.php?id=166608       未完待续 水平有限,仅供个人参考。转载请注明出处和链接。
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载