| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- //将数字转换成中文
- function convertCurrency(money) {
- //汉字的数字
- var cnNums = new Array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');
- //基本单位
- var cnIntRadice = new Array('', '拾', '佰', '仟');
- //对应整数部分扩展单位
- var cnIntUnits = new Array('', '万', '亿', '兆');
- //对应小数部分单位
- var cnDecUnits = new Array('角', '分', '毫', '厘');
- //整数金额时后面跟的字符
- var cnInteger = '整';
- //整型完以后的单位
- var cnIntLast = '元';
- //最大处理的数字
- var maxNum = 999999999999999.9999;
- //金额整数部分
- var integerNum;
- //金额小数部分
- var decimalNum;
- //输出的中文金额字符串
- var chineseStr = '';
- //分离金额后用的数组,预定义
- var parts;
- //负数汉字
- var negative = '';
- if (money == '') { return ''; }
- money = parseFloat(money);
- if (money >= maxNum) {
- //超出最大处理数字
- return '';
- }
- if (money == 0) {
- chineseStr = cnNums[0] + cnIntLast + cnInteger;
- return chineseStr;
- }
- if (money < 0){
- money = 0 - money;
- negative = '负';
- }
- //转换为字符串
- money = money.toString();
- if (money.indexOf('.') == -1) {
- integerNum = money;
- decimalNum = '';
- } else {
- parts = money.split('.');
- integerNum = parts[0];
- decimalNum = parts[1].substr(0, 4);
- }
- //获取整型部分转换
- if (parseInt(integerNum, 10) > 0) {
- var zeroCount = 0;
- var IntLen = integerNum.length;
- for (var i = 0; i < IntLen; i++) {
- var n = integerNum.substr(i, 1);
- var p = IntLen - i - 1;
- var q = p / 4;
- var m = p % 4;
- if (n == '0') {
- zeroCount++;
- } else {
- if (zeroCount > 0) {
- chineseStr += cnNums[0];
- }
- //归零
- zeroCount = 0;
- chineseStr += cnNums[parseInt(n)] + cnIntRadice[m];
- }
- if (m == 0 && zeroCount < 4) {
- chineseStr += cnIntUnits[q];
- }
- }
- chineseStr += cnIntLast;
- }
- //小数部分
- if (decimalNum != '') {
- var decLen = decimalNum.length;
- for (var i = 0; i < decLen; i++) {
- var n = decimalNum.substr(i, 1);
- if (n != '0') {
- chineseStr += cnNums[Number(n)] + cnDecUnits[i];
- }
- }
- }
- if (chineseStr == '') {
- chineseStr += cnNums[0] + cnIntLast + cnInteger;
- } else if (decimalNum == '') {
- chineseStr += cnInteger;
- }
- return negative+chineseStr;
- }
- /**
- * 强制保留2位小数,不足补 0
- */
- function formatterNum(x) {
- var f = parseFloat(x);
- if (isNaN(f)) {
- return false;
- }
- var f = Math.round(x * 100) / 100;
- var s = f.toString();
- var rs = s.indexOf('.');
- if (rs < 0) {
- rs = s.length;
- s += '.';
- }
- while (s.length <= rs + 2) {
- s += '0';
- }
- return s;
- }
- function formatterNumWithStar(x){
- var result = formatterNum(x);
- var newResult = replaceStr(result, 0, result.length, '*');
- return newResult;
- }
- //替换某个字符串从start到end的内容为char字符
- function replaceStr(str,start,end, char){
- var len = str.length;
- var prev = str.substr(0, start);
- var latter = str.substr(end, len-end);
- var num = end - start;
- var rs = str.indexOf('.');
- return prev + repeatStr(char, num, rs) + latter;
- }
-
- //重复某个字符多次
- function repeatStr(char, length, rs){
- var str = '';
- for(var i=0; i<length; ++i){
- if(i != rs){
- str += char;
- }else{
- str += '.';
- }
-
- }
- return str;
- }
- /**
- * 将数值格式化成金额形式
- *
- * @param num 数值(Number或者String)
- * @param precision 精度,默认不变
- * @param separator 分隔符,默认为逗号
- * @return 金额格式的字符串,如'1,234,567',默认返回NaN
- * @type String
- */
- function formatNumber(num, precision, separator) {
- var parts;
- // 判断是否为数字
- if (!isNaN(parseFloat(num)) && isFinite(num)) {
- // 把类似 .5, 5. 之类的数据转化成0.5, 5, 为数据精度处理做准, 至于为什么
- // 不在判断中直接写 if (!isNaN(num = parseFloat(num)) && isFinite(num))
- // 是因为parseFloat有一个奇怪的精度问题, 比如 parseFloat(12312312.1234567119)
- // 的值变成了 12312312.123456713
- num = Number(num);
- // 处理小数点位数
- num = (typeof precision !== 'undefined' ? (Math.round(num * Math.pow(10,precision)) / Math.pow(10,precision)).toFixed(precision) : num).toString();
- // 分离数字的小数部分和整数部分
- parts = num.split('.');
- // 整数部分加[separator]分隔, 借用一个著名的正则表达式
- parts[0] = parts[0].toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1' + (separator || ','));
-
- return parts.join('.');
- }
- return NaN;
- }
-
- function formatNumberNull(num, rec,index) {
- var precision = 2;
- //var separator = '';
- var parts;
- if(!num)
- return '--';
- // 判断是否为数字
- if (!isNaN(parseFloat(num)) && isFinite(num)) {
- // 把类似 .5, 5. 之类的数据转化成0.5, 5, 为数据精度处理做准, 至于为什么
- // 不在判断中直接写 if (!isNaN(num = parseFloat(num)) && isFinite(num))
- // 是因为parseFloat有一个奇怪的精度问题, 比如 parseFloat(12312312.1234567119)
- // 的值变成了 12312312.123456713
- num = Number(num);
- // 处理小数点位数
- num = (typeof precision !== 'undefined' ? (Math.round(num * Math.pow(10,precision)) / Math.pow(10,precision)).toFixed(precision) : num).toString();
- // 分离数字的小数部分和整数部分
- parts = num.split('.');
- // 整数部分加[separator]分隔, 借用一个著名的正则表达式
- //parts[0] = parts[0].toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1' + (separator || ','));
-
- return parts.join('.');
- }
- return '--';
- }
|