js中控制小数点的显示位数的技术整理

js中控制小数点的显示位数的技术整理(文摘整理和个人经验)

 

js中自带方法控制小数点的显示位数

< script language = " JScript " >
Number.prototype.toFixed
= function(num)
{
   
// 重新构造toFixed方法,IE5.0+ 
 
   with(Math) this .NO = round( this .valueOf() * pow( 10 ,num)) / pow( 10 ,num);
   
return  String( / /. / g.exec( this .NO) ? this .NO: this .NO + " . " + String(Math.pow( 10 ,num)).substr( 1 ,num));
   }

alert((
12.9299 ).toFixed( 2 ));
alert((
12.9999 ).toFixed( 2 ));
 </ script >   

 

 

控制保留几位有效小数的js函数
//Code CreateBy abandonship 2007.03.12
function FormatAfterDotNumber( ValueString, nAfterDotNum )
{
        var ValueString,nAfterDotNum ;
  var resultStr,nTen;
  ValueString = ""+ValueString+"";
  strLen = ValueString.length;
  dotPos = ValueString.indexOf(".",0);
  if (dotPos == -1)
        {
    resultStr = ValueString+".";
    for (i=0;i<nAfterDotNum ;i++)
                {
      resultStr = resultStr+"0";
          }
    return resultStr;
  }
  else
        {
    if ((strLen - dotPos - 1) >= nAfterDotNum ){
      nAfter = dotPos + nAfterDotNum  + 1;
      nTen =1;
      for(j=0;j<nAfterDotNum ;j++){
        nTen = nTen*10;
      }
      resultStr = Math.round(parseFloat(ValueString)*nTen)/nTen;
      return resultStr;
    }
    else{
      resultStr = ValueString;
      for (i=0;i<(nAfterDotNum  - strLen + dotPos + 1);i++){
        resultStr = resultStr+"0";
      }
      return resultStr;
    }
  }
}

应用时只需要FormatAfterDotNumber( ’数字字符串’, 保留小数位数 );
for example:

<html>
<head>
<SCRIPT LANGUAGE="JAVAscript">
     <!--调用上面的函数 -->
</script>
</head>
<body>
<input type="text"  name="strTemp">
<input type="button" οnclick="alert( FormatAfterDotNumber( document.all. strTemp.value), 保留小数位)" >
</body>
</html>

 

 

一个替代js自带的toFixed函数的方法和优点

之前一直在用这个js自带的toFixed函数来进行四舍五入的操作,可是,在实际使用过程中却遇到了问题。

比如

Javascript代码 复制代码  收藏代码
  1. var money=0.00542;//0.006;   
  2. alert(Number(money).toFixed(2));   
  3. //0.00  
var money=0.00542;//0.006;
alert(Number(money).toFixed(2));
//0.00



可以看出上面的结果是错误的,下面的方法通过巧妙的使用Math.round函数,完全可以解决数值很小时的精度问题。

Javascript代码 复制代码  收藏代码
  1. var money=0.00542;//0.006;   
  2. alert(Number(money).toFixed(2));   
  3.   
  4. function round2(number,fractionDigits){   
  5.     with(Math){   
  6.         return round(number*pow(10,fractionDigits))/pow(10,fractionDigits);   
  7.     }   
  8. }   
  9. alert(round2(money,2));//0.01  
var money=0.00542;//0.006;
alert(Number(money).toFixed(2));

function round2(number,fractionDigits){
	with(Math){
		return round(number*pow(10,fractionDigits))/pow(10,fractionDigits);
	}
}
alert(round2(money,2));//0.01



round 方法
返回与给出的数值表达式最接近的整数。

Math.round(number)

必选项 number 参数是要舍入到最接近整数的值。

说明
如果 number 的小数部分大于等于 0.5,返回值是大于 number 的最小整数。否则,round 返回小于等于 number 的最大整数。

 

 

js保留小数位数的某人总结

一、问题的产生:
自己在编码时,在javascript中遇到了3.21*3=9.629999999999999的现象

二、百度一下

得到如下信息:

用Javascript取float型小数点后两位,例22.127456取成22.13,如何做?

1. 最笨的办法....... [我就怎么干的.........]

function get()
{
    var s = 22.127456 + "";
    var str = s.substring(0,s.indexOf(".") + 3);
    alert(str);
}

2. 正则表达式效果不错

<script type="text/javascript">
onload = function(){
    var a = "23.456322";
    var aNew;
    var re = /([0-9]+/.[0-9]{2})[0-9]*/;
    aNew = a.replace(re,"$1");
    alert(aNew);
}
</script>

3. 他就比较聪明了.....

<script>
var num=22.127456;
alert( Math.round(num*100)/100);
</script>

4.会用新鲜东西的朋友....... 但是需要 IE5.5+才支持。

<script>
var num=22.127456;
alert( num.toFixed(2));
</script>

三、总结后,自己写了个javascript多位数四舍五入的通用方法

//num表示要四舍五入的数,v表示要保留的小数位数。
function decimal(num,v)
{
    var vv = Math.pow(10,v);
    return Math.round(num*vv)/vv;
}

 

 

Math对象


属性



LN10 (10的自然对数)

PI (3.1415926...)

SQRT1_2 (1/2的平方根)

方法

abs(x) 返回x的绝对值

acos(x) 返回x的arc cosine值

asin(x) 返回x的arc sin值

atan(x) 返回x的arc tangent值

ceil(x) 返回大于等于x的最小整数

cos(x) 返回x的cosine值

exp(x) 返回e的x次方

floor(x) 返回小于等于x的最大整数

log(x) 返回x的

max(x,y) 返回x,y中的大值

min(x,y) 返回x,y中的小值

pow(x,y) 返回x的y次方

round(x) 舍入到最近整数,(小于或等于0.5小数舍去)

sin(x) 返回x的sin值

sqrt(x) 返回x的平方根

tan(x) 返回x的tangent值

 

 

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值