/**
|
* 乘法
|
* @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 + "");
|
|
};
|