1.数值格式可能会使用的相关函数:
toPrecision 方法
返回一个字符串,其中包含一个以指数记数法或定点记数法表示的,具有指定数字位数的数字。
numObj.toPrecision ([precision])
参数
numObj
必选项。一个 Number 对象。
precision
可选项。有效数字的位数。必须在 1 – 21 之间,包括 1 和 21。
说明
对于以指数记数法表示的数字,将返回小数点后的 precision - 1 位数字。对于以定点记数法表示的数字,将返回 precision 位有效数字。
如果没有提供 precision 或者为 undefined,那么将改为调用 toString方法。
toFixed 方法
返回一个字符串,代表一个以定点表示法表示的数字。
numObj.toFixed([fractionDigits])
参数
numObj
必选项。一个 Number 对象。
fractionDigits
可选项。小数点后的数字位数。其值必须在 0 – 20 之间,包括 0 和 20。
说明
toFixed 方法返回一个以定点表示法表示的数字的字符串形式。该字符串中小数点之前有一位有效数字,而且其后必须包含 fractionDigits 数字。
如果没有 fractionDigits 参数,或者该参数为 undefined,toFixed 方法假定该值为 0。
toExponential 方法
返回一个字符串,其中包含一个以指数记数法表示的数字。
numObj.toExponential([fractionDigits])
参数
numObj
必选项。一个 Number 对象。
fractionDigits
可选项。小数点后数字位数。必须在 0 – 20 之间,包括 0 和 20。
说明
toExponential 方法返回一个字符串,该字符串代表一个以指数记数法表示的数字。该字符串中小数点之前有一位有效数字,并可能在小数点后有 fractionDigits 位数字。
如果没有 fractionDigits 参数,toExponential 方法将返回足够多位数字以便特别地指定该数字。
基本方法实例:
如var num=2835.000383804854;
num.toFixed(2)=2835.00保留两位小数点,最后小数点的值为后面一位数的四舍五入.
num.toExponential(5)=2.83500e+3 以科学计数法表示.最后小数点的值为后面一位数的四舍五入.
num.toPrecision(8)=2835.0004 返回8位有效数字,最后小数点的值为后面一位数的四舍五入
2实例:.数值格式化
/**
* 从数值型格式化串中查找小数位数.
* 无小数有千分位格式化串:#,##0;-#,##0
* 无小数无千分位格式化串:###0;-###0
* 二位小数有千分位格式化串:#,##0.00;-#,##0.00
* @param 格式化串.
* @return 需要的小数位数.不需要返回0
*/
function decimalDigits(patternString){
var digits = 0;
if(patternString.indexOf(";")!=-1){//格式化串可能为:#,##0.00;-#,##0.00
if(patternString.indexOf(".")==-1)//无小数位.
return digits;
digits = patternString.indexOf(";")-patternString.indexOf(".")-1;
}else{//格式化串可能为:#,##0.00
if(patternString.indexOf(".")==-1)//无小数位.
return digits;
if(patternString.length >1)
digits = patternString.length-patternString.indexOf(".")-1;
}
return digits;
}
/**
* 查找数值型格式化串中是否有千分位符号.
* @param 格式化串.<b>
* @return 0:不需要 ; 1:需要
*/
function isThousands(patternString){
var reNum = 0;//默认不需要
if(patternString.indexOf(",")!=-1)//能找到.
reNum = 1;
return reNum;
}
/**
* 将数值四舍五入后格式化.
*
* @param num 数值(Number或者String)
* @param cent 要保留的小数位(Number)
* @param isThousand 是否需要千分位 0:不需要,1:需要(数值类型);
* @return 格式的字符串,如'1,234,567.45'
* @type String
*/
function formatNumber(num,cent,isThousand) {
num = num.toString().replace(/\$|\,/g,'');
if(isNaN(num))//检查传入数值为数值类型.
num = "0";
if(isNaN(cent))//确保传入小数位为数值型数值.
cent = 0;
cent = parseInt(cent);
cent = Math.abs(cent);//求出小数位数,确保为正整数.
if(isNaN(isThousand))//确保传入是否需要千分位为数值类型.
isThousand = 0;
isThousand = parseInt(isThousand);
if(isThousand < 0)
isThousand = 0;
if(isThousand >=1) //确保传入的数值只为0或1
isThousand = 1;
sign = (num == (num = Math.abs(num)));//获取符号(正/负数)
//Math.floor:返回小于等于其数值参数的最大整数
num = Math.floor(num*Math.pow(10,cent)+0.50000000001);//把指定的小数位先转换成整数.多余的小数位四舍五入.
cents = num%Math.pow(10,cent); //求出小数位数值.
num = Math.floor(num/Math.pow(10,cent)).toString();//求出整数位数值.
cents = cents.toString();//把小数位转换成字符串,以便求小数位长度.
while(cents.length<cent){//补足小数位到指定的位数.
cents = "0" + cents;
}
if(isThousand == 0) //不需要千分位符.
return (((sign)?'':'-') + num + '.' + cents);
//对整数部分进行千分位格式化.
for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
num = num.substring(0,num.length-(4*i+3))+','+
num.substring(num.length-(4*i+3));
return (((sign)?'':'-') + num + '.' + cents);
}