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

来源:互联网 发布:php单例模式是什么 编辑:程序博客网 时间:2024/06/05 19:46
javascriptfunctionmath正则表达式stringbutton

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" onclick="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  
[javascript] view plaincopy
  1. var money=0.00542;//0.006;  
  2. alert(Number(money).toFixed(2));  
  3. //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  
[javascript] view plaincopy
  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  



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值