当前位置: 爱符号 - 所有分类 - Web开发 - js - js中的四舍五入 round
js中的四舍五入 round jsZhongDeSiSheWuRu round
符号空间 发表于:2012-11-20 12:23:39 阅读(2788)
关键词:round round js js javascript javascript
摘要:但是在javascript中,有这样的问题: 1.两个小数相乘,得出来的数与我们手算出来的不一样,它总是会在后面跟上一堆小数,让结果与我们算出来的无限接近,这是一个BUG。 2.遇到 3.1 要输出到界面上,正确的应该是 3.10,但是输出后会发现后面的0不见了,所以需要补0操作。

在javascript中 Math.round是可以四舍五入的,但是用了其它编程语言的人,对它可能很是费解,因为它不是输出小数,而是变成了整数。

所以要想还输出小数的话,需要费一些力气。


在网页中计算一些数据时,有时会碰到输出金额在页面上,并且要求显示后两位小数。

但是在javascript中,有这样的问题:

1.两个小数相乘,得出来的数与我们手算出来的不一样,它总是会在后面跟上一堆小数,让结果与我们算出来的无限接近,这是一个BUG。

2.遇到 3.1 要输出到界面上,正确的应该是 3.10,但是输出后会发现后面的0不见了,所以需要补0操作。


下面分享我自己写的一个函数,可以解决补0的问题,另外也可能解决四舍五入的问题

如果你得到的结果是 2.3548899,而实际正确结果应该是:2.36,那么我们要如何解决这个问题呢?需要进两次,先取后3位小数得到:2.355,再取后两位小数得到:2.36

虽然麻烦了一些,但结果是正确的。


另外关于javascript中乘法结果有很长的小数问题,网上也有解决的办法,就是将整数部分与小数部分 分开处理,然后再做成小数。

参考网址:http://hi.baidu.com/wei_yuhong/item/b1c9d915d037eaef9913d62c


而另外的解决办法就是 正确的乘法后,用上面提到的,先取后3位小数,再取后2位小数,结果就是正确的,这样简单容易理解。


function round(value, decimals) {
	///<summary>
	/// 将小数值舍入到指定精度。
	///</summary>
	///<param name="value" type="float">
	/// 要舍入的小数。
	///</param>
	///<param name="decimals" type="int">
	/// 返回值中的小数位数(精度)。
	/// 默认为2,如果小于0时即为0 。
	///</param>
	var n = decimals || 2;
	if (n < 0) n = 0;
	var p = Math.pow(10, n);
	var newValue = (Math.round(value * p)) / p;
	var t = newValue.toString();
	var i = t.lastIndexOf('.');
	var j = 0;
	if (i == -1) {
		j = n;
		t += ".";
	} else {
		var x = t.length - (i + 1);
		j = x < n ? n - x : 0;
	}
	for (var y = 0; y < j; y++) {
		t += "0";
	}
	return t;
}
另外此函数已被我扩展到 jquery中,

本站就已经用到了。需要看源代码的,请下载此文件:jquery.common.js

如果需要压缩版的,可以下载这个:jquery.common.min.js

jquery.common 扩展中,有很多实用的函数,后面会介绍。

注意,必须先引用jquery。



声明:以上内容仅代表作者观点,不代表爱符号赞成此内容或立场