/** * 乘法 * @param arg1 * @param arg2 * @returns {Number} */ function accMul(arg1, arg2) { var m = 0, s1 = arg1.toString(), s2 = arg2.toString(); try { m += s1.split(".")[1].length } catch (e) { } try { m += s2.split(".")[1].length } catch (e) { } return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m) } /** * 除法 * @param arg1 * @param arg2 * @returns {Number} */ function accDiv(arg1, arg2) { var t1 = 0, t2 = 0, r1, r2; try { t1 = arg1.toString().split(".")[1].length } catch (e) { } try { t2 = arg2.toString().split(".")[1].length } catch (e) { } with (Math) { r1 = Number(arg1.toString().replace(".", "")) r2 = Number(arg2.toString().replace(".", "")) return (r1 / r2) * pow(10, t2 - t1); } } /** * 加法 * @param arg1 * @param arg2 * @returns {Number} */ function accAdd(arg1, arg2) { var r1, r2, m, c; try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 } try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 } c = Math.abs(r1 - r2); m = Math.pow(10, Math.max(r1, r2)) if (c > 0) { var cm = Math.pow(10, c); if (r1 > r2) { arg1 = Number(arg1.toString().replace(".", "")); arg2 = Number(arg2.toString().replace(".", "")) * cm; } else { arg1 = Number(arg1.toString().replace(".", "")) * cm; arg2 = Number(arg2.toString().replace(".", "")); } } else { arg1 = Number(arg1.toString().replace(".", "")); arg2 = Number(arg2.toString().replace(".", "")); } return (arg1 + arg2) / m } /** * 减法 * @param arg1 * @param arg2 * @returns */ function accSub(arg1, arg2) { var r1, r2, m, n; try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 } try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 } m = Math.pow(10, Math.max(r1, r2)); //last modify by deeka //动态控制精度长度 n = (r1 >= r2) ? r1 : r2; return ((arg1 * m - arg2 * m) / m).toFixed(n); } /** * 数字转换为大写 * @param NumStr * @returns */ function Arabia_to_Chinese(NumStr) { var Num = NumStr + ""; for (i = Num.length - 1; i >= 0; i--) { Num = Num.replace(",", "")//替换tomoney()中的“,” Num = Num.replace(" ", "")//替换tomoney()中的空格 } Num = Num.replace("¥", "")//替换掉可能出现的¥字符 if (isNaN(Num)) { //验证输入的字符是否为数字 alert("请检查小写金额是否正确"); return; } //字符处理完毕后开始转换,采用前后两部分分别转换 part = String(Num).split("."); newchar = ""; //小数点前进行转化 for (i = part[0].length - 1; i >= 0; i--) { if (part[0].length > 10) { alert("位数过大,无法计算"); return ""; }//若数量超过拾亿单位,提示 tmpnewchar = "" perchar = part[0].charAt(i); switch (perchar) { case "0": tmpnewchar = "零" + tmpnewchar; break; case "1": tmpnewchar = "壹" + tmpnewchar; break; case "2": tmpnewchar = "贰" + tmpnewchar; break; case "3": tmpnewchar = "叁" + tmpnewchar; break; case "4": tmpnewchar = "肆" + tmpnewchar; break; case "5": tmpnewchar = "伍" + tmpnewchar; break; case "6": tmpnewchar = "陆" + tmpnewchar; break; case "7": tmpnewchar = "柒" + tmpnewchar; break; case "8": tmpnewchar = "捌" + tmpnewchar; break; case "9": tmpnewchar = "玖" + tmpnewchar; break; } switch (part[0].length - i - 1) { case 0: tmpnewchar = tmpnewchar + "元"; break; case 1: if (perchar != 0) tmpnewchar = tmpnewchar + "拾"; break; case 2: if (perchar != 0) tmpnewchar = tmpnewchar + "佰"; break; case 3: if (perchar != 0) tmpnewchar = tmpnewchar + "仟"; break; case 4: tmpnewchar = tmpnewchar + "万"; break; case 5: if (perchar != 0) tmpnewchar = tmpnewchar + "拾"; break; case 6: if (perchar != 0) tmpnewchar = tmpnewchar + "佰"; break; case 7: if (perchar != 0) tmpnewchar = tmpnewchar + "仟"; break; case 8: tmpnewchar = tmpnewchar + "亿"; break; case 9: tmpnewchar = tmpnewchar + "拾"; break; } newchar = tmpnewchar + newchar; } //小数点之后进行转化 if (Num.indexOf(".") != -1) { if (part[1].length > 2) { alert("小数点之后只能保留两位,系统将自动截断"); part[1] = part[1].substr(0, 2) } for (i = 0; i < part[1].length; i++) { tmpnewchar = "" perchar = part[1].charAt(i) switch (perchar) { case "0": tmpnewchar = "零" + tmpnewchar; break; case "1": tmpnewchar = "壹" + tmpnewchar; break; case "2": tmpnewchar = "贰" + tmpnewchar; break; case "3": tmpnewchar = "叁" + tmpnewchar; break; case "4": tmpnewchar = "肆" + tmpnewchar; break; case "5": tmpnewchar = "伍" + tmpnewchar; break; case "6": tmpnewchar = "陆" + tmpnewchar; break; case "7": tmpnewchar = "柒" + tmpnewchar; break; case "8": tmpnewchar = "捌" + tmpnewchar; break; case "9": tmpnewchar = "玖" + tmpnewchar; break; } if (i == 0) tmpnewchar = tmpnewchar + "角"; if (i == 1) tmpnewchar = tmpnewchar + "分"; newchar = newchar + tmpnewchar; } } //替换所有无用汉字 while (newchar.search("零零") != -1) newchar = newchar.replace("零零", "零"); newchar = newchar.replace("零亿", "亿"); newchar = newchar.replace("亿万", "亿"); newchar = newchar.replace("零万", "万"); newchar = newchar.replace("零元", "元"); newchar = newchar.replace("零角", ""); newchar = newchar.replace("零分", ""); if (newchar.charAt(newchar.length - 1) == "元" || newchar.charAt(newchar.length - 1) == "角") newchar = newchar + "整" return newchar; } 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; if (money === '') { return ''; } money = parseFloat(money); if (money >= maxNum) { //超出最大处理数字 return ''; } if (money === 0) { chineseStr = cnNums[0] + cnIntLast + cnInteger; return chineseStr; } //转换为字符串 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 chineseStr; } /** * 增加千分符以及保留几位小数(四舍五入) * @param NumStr * @returns */ function Mmoney(s, n) { s = $.trim(s) == '' ? 0 : s; n = $.trim(n) == '' ? 2 : n; return s.toFixed(n); //var t = ''; //var regPos = /^\d+(\.\d+)?$/; //非负浮点数 //var regNeg = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; //负浮点数 //if (s == 0 || regPos.test(s) || regNeg.test(s)) { // n = n > 0 && n <= 20 ? n : 2; // s = parseFloat((s + '').replace(/[^\d\.-]/g, '')).toFixed(n) + ''; // var l = ''; // if (parseFloat(s.split('.')[0]) >= 0) { // l = s.split('.')[0].split('').reverse(); // } else { // l = s.split('.')[0].split('-')[1].split('').reverse(); // } // r = s.split('.')[1]; // for (var i = 0; i < l.length; i++) { // t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? ',' : ''); // }; // t = t.split('').reverse().join('') + '.' + r; // if (parseFloat(s.split('.')[0]) < 0) { // t = "-" + t; // }; //} //return t; } /** * 增加千分符以及保留几位小数(四舍五入) * @param NumStr * @returns */ function MmoneyFM(s, n) { var t = ''; var regPos = /^\d+(\.\d+)?$/; //非负浮点数 var regNeg = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; //负浮点数 if (s == 0 || regPos.test(s) || regNeg.test(s)) { n = n > 0 && n <= 20 ? n : 2; s = parseFloat((s + '').replace(/[^\d\.-]/g, '')).toFixed(n) + ''; var l = ''; if (parseFloat(s.split('.')[0]) >= 0) { l = s.split('.')[0].split('').reverse(); } else { l = s.split('.')[0].split('-')[1].split('').reverse(); } r =s.indexOf('.')>0?s.split('.')[1]:"00"; for (var i = 0; i < l.length; i++) { t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? ',' : ''); }; t = t.split('').reverse().join('') + '.' + r; if (parseFloat(s.split('.')[0]) < 0) { t = "-" + t; }; } return t; } function NumberBoxBind() { $(".priceTxtBox").keyup(function () { $(this).val($(this).val().toString().match(/^\d+(?:\.\d{0,8})?/)); if (isNaN($(this).val()) || $(this).val() == null || $(this).val() == "") { return false; } var price = $(this).val(); var count = $(this).parents("tr").find(".countTxtBox").val(); if (isNaN(count) || count == null || count == "") { return false; } var amount = accMul(price, count).toFixed(2); $(this).parents("tr").find(".amountTxtBox").val(amount); }); $(".countTxtBox").keyup(function () { $(this).val($(this).val().toString().match(/^\d+(?:\.\d{0,4})?/)); if (isNaN($(this).val()) || $(this).val() == null || $(this).val() == "") { return false; } var count = $(this).val(); var price = $(this).parents("tr").find(".priceTxtBox").val(); if (isNaN(price) || price == null || price == "") { return false; } var amount = accMul(price, count).toFixed(2); $(this).parents("tr").find(".amountTxtBox").val(amount); }); $(".amountTxtBox").keyup(function () { $(this).val(parseFloat($(this).val().toString().match(/^\d+(?:\.\d{0,2})?/))); if (isNaN($(this).val()) || $(this).val() == null || $(this).val() == "") { return false; } var amount = $(this).val(); var count = $(this).parents("tr").find(".countTxtBox").val(); if (isNaN(count) || count == null || count == "" || parseFloat(count) <= 0) { return false; } var price = parseFloat(accDiv(amount, count).toFixed(8)); $(this).parents("tr").find(".amountTxtBox").val(price); }); }; Number.prototype.toFixed = function (d) { var s = this + ""; if (!d) d = 0; if (s.indexOf(".") == -1) s += "."; s += new Array(d + 1).join("0"); if (new RegExp("^(-|\\+)?(\\d+(\\.\\d{0," + (d + 1) + "})?)\\d*$").test(s)) { var s = "0" + RegExp.$2, pm = RegExp.$1, a = RegExp.$3.length, b = true; if (a == d + 2) { a = s.match(/\d/g); if (parseInt(a[a.length - 1]) > 4) { for (var i = a.length - 2; i >= 0; i--) { a[i] = parseInt(a[i]) + 1; if (a[i] == 10) { a[i] = 0; b = i != 1; } else break; } } s = a.join("").replace(new RegExp("(\\d+)(\\d{" + d + "})\\d$"), "$1.$2"); } if (b) s = s.substr(1); return parseFloat((pm + s).replace(/\.$/, "")); } return parseFloat(this + ""); };