当前位置: 首页 > 前端笔记 > JAVASCRIPTS > 保留小数点后几位的JS方法
2014年04八月

保留小数点后几位的JS方法

在开发过程中经常遇到要调整小数的格式,如保留小数点后两位等等。其实大部分时间在火狐下调试JS,不会注意一些小问题,反转到IE下,出现了偏差,调试好久,记录以备忘。

第一种方法,toFixed()。toFixed()方法可把 Number 四舍五入为指定小数位数的数字。

NumberObject.toFixed(num),必需。规定小数的位数,是 0 ~ 20 之间的值,包括 0 和 20,有些实现可以支持更大的数值范围。如果省略了该参数,将用 0 代替。

返回 NumberObject 的字符串表示,不采用指数计数法,小数点后有固定的 num 位数字。如果必要,该数字会被舍入,也可以用 0 补足,以便它达到指定的长度。如果 num 大于 le+21,则该方法只调用 NumberObject.toString(),返回采用指数计数法表示的字符串。

当 num 太小或太大时抛出异常 RangeError。0 ~ 20 之间的值不会引发该异常。有些实现支持更大范围或更小范围内的值。当调用该方法的对象不是 Number 时抛出 TypeError 异常。

var a = 12.34267;
alert(a.toFixed(2)); //结果是12.34
var b = 12.30367
alert(b.toFixed(2)) //结果是12.30
var c = 12.3
alert(c.toFixed(2)) //结果是12.30
var c = 12.325
alert(c.toFixed(2)) //IE结果是12.33 , FF,Chrome,Opera下是12.32
var d = 12.3250
alert(d.toFixed(2)) //IE结果是12.33 , FF,Chrome,Opera下是12.32
var e = 12.3251
alert(e.toFixed(2)) //结果是12.33

不同浏览器返回的结果上有差异,所以得重新做一个方法,保持结果一致。大部分的说法都是重写toFixed方法,我不喜欢这种干法,我喜欢重新定义一个方法。在网上找到一个很简洁的思路,挺好!

Number.prototype.mine_toFixed = function(len, flog){ //len截取长度 flog是否补零 1补零 0不补
	var t = Math.pow(10, len); //10的len次幂
	var s = Math.round(this*t); //this就是你要处理的数字,Math.round最接近Number的整数,保持了四舍五入
	var l = s/t;
	var r = l;
	if(flog==1){
		var m = l.toString(); //转字符
		var i = m.indexOf("."); //找到点的位置
		if(i==-1){ //如果没有点 补点
			m = m+"."; 
		}
		a = m.split('.'); //拆分字符 a[0]是整数部分 a[1]是小数部分
		var h = a[1].length; //小数的位数
		for(var j=h; j<len; j++){ //补零
			m = m+'0'; 
		}
		r = m;
	}
	return r;
};
var a = 12.3250;
alert(a.mine_toFixed(2)); //结果是12.33

var b = 12.3205;
alert(b.mine_toFixed(2)); //结果是12.32

var c = 12.3245;
alert(c.mine_toFixed(2)); //结果是12.32

var d = 12;
alert(d.mine_toFixed(2,0)); //结果是12 这个是数字格式
alert(d.mine_toFixed(3,1)); //结果是12.00 这个字符格式,进行运算的时候要注意

经过初步测试,可以正确的格式化!

第二种方法,就是直接用Math.round(),实际在上面的方法中已经用到了,可以参考就行了。

文章信息

  • 发布日期:2014年08月04日 15:51:22
  • 固定地址:http://www.estorm.cn/notes/javascripts/2014-08-04/js-tofixed.html