将数值四舍五入后格式化,带有千分位

<html>
<head>
</head>
<script>

	//保留几位小数
	function fmoney(obj, num) {
		return obj.value = formatNumber(obj.value, 2, 1);
	}
	/*
	将数值四舍五入后格式化.
	@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);
	}

</script>
<input onblur="fmoney(this,2);" value="" />
<body>
</body>
</html>

时间: 2024-10-13 11:02:38

将数值四舍五入后格式化,带有千分位的相关文章

将金钱数变成带有千分位

//价格千分位格式化 function formatNum(num){ return (num.toFixed(2) + '').replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$&,'); } $1.$2.....$99 与 regexp 中的第 1 到第 99 个子表达式相匹配的文本. $& 与 regexp 相匹配的子串. $` 位于匹配子串左侧的文本. $' 位于匹配子串右侧的文本. $$ 直接量符号. Vue.prototype.$fmoney

JavaScript数值千分位格式化的两种方法

在对数值进行格式化的时候,一个常见的问题是按照千分位格式化,网上对这个问题已经有很多种解决方法了,还可以利用Array.prototype.reduce方法来实现千分位格式化. function formatNumber(num) { if (isNaN(num)) { throw new TypeError("num is not a number"); } var groups = (/([\-\+]?)(\d*)(\.\d+)?/g).exec("" + nu

从千分位格式化谈JS性能优化

所谓的千分位形式,即从个位数起,每三位之间加一个逗号.例如“10,000”.针对这个需求,我起初写了这样一个函数: // 方法一function toThousands(num) {var result = [ ], counter = 0;num = (num || 0).toString().split('');for (var i = num.length - 1; i >= 0; i--) {counter++;result.unshift(num[i]);if (!(counter %

将数值四舍五入(保留2位小数)后格式化成金额形式

/** * 将数值四舍五入(保留2位小数)后格式化成金额形式 * * @param num 数值(Number或者String) * @return 金额格式的字符串,如'1,234,567.45' * @type String */function formatCurrency(num) { num = num.toString().replace(/\$|\,/g,''); if(isNaN(num)) num = "0"; sign = (num == (num = Math.a

Js笔试题之千分位格式化

用js实现如下功能,将给定的数字转化成千分位的格式,如把“10000”转化成“10,000”,并考虑到性能方面的因素. 一.首先想到的办法,将数字转换为字符串(toString())再打散成数组(split),如果直接数字转换为数组,就是一整个放进去了,不能单独取到每一位.然后通过循环,逐个倒着把数组中的元素插入到新数组的开头(unshift),第三次或三的倍数次,插入逗号,最后把新数组拼接成一个字符串 n=1233456; toQfw(n); function toQfw(){ var arr

[js开源组件开发]数字或金额千分位格式化组件

数字或金额千分位格式化组件 这次距离上一个组件<[js开源组件开发]table表格组件>时隔了一个月,由于最近的项目比较坑,刚挖完坑,所以来总结性提出来几个组件弥补这次的空缺,首先是金额和数字的千分位和小数点控制的组件,它的作用主要是在输入框时限制输入的内容为数字.也可以用于普通标签的数字格式化,效果如下图: demo演示地址请点击 http://www.lovewebgames.com/jsmodule/format-number.html 源码github托管地址请点击https://gi

impala 四舍五入后转换成string后又变成一个double的数值解决(除不尽的情况)

impala 四舍五入后转换成string后又变成一个double的数值解决(除不尽的情况)例如Query: select cast(round(2 / 3, 4)*100 as string)+---------------------------------------+| cast(round(2 / 3, 4) * 100 as string) |+---------------------------------------+| 66.670000000000002 |+-------

用robotframework 标准库String解决由于存在千分位分隔符导致两个数值不相等的问题。

在编写robotframework自动化断言的过程中,我遇到了如下问题: 我想写一个两个金额判断是否相等的断言,其中一个金额是展示字段存在千分位分隔符,另一个金额是input带入字段,没有千分位分隔符,我期望得到相等的结果,但是报错了!!!!作为小白的我完全无从下手,今天终于找到了解决办法----------String标准库. 话不多说,放上标准库的官方文档http://robotframework.org/robotframework/latest/libraries/String.html

easyui datagrid 格式化列显示两位小数、千分位

{ field: "contractmoney", title: "合同总价", width: 72, formatter: function (value, row, index) { if (row != null) { return parseFloat(value).toFixed(2); } } }, //二位小数.千分位 { field: "price", title: "单价", width: 60, align