(function(owner) { //c2c微服务访问url前缀 owner.C2CUrl = "https://zhixinchains.com/otc/"; //币币微服务 owner.CCTUrl = "https://zhixinchains.com/cct/"; //user微服务访问url前缀 owner.walletFileUrl = "https://file.zhixinchains.com/"; owner.confBaseUrl = "https://zhixinchains.com/sysconf/"; owner.currencyBaseUrl = "https://zhixinchains.com/currency/"; // 本地user地址 owner.UserUrl = "https://zhixinchains.com/user/"; owner.walletBaseUrl = "https://zhixinchains.com/user/"; // 本地登录地址 owner.loginBaseUrl = "https://zhixinchains.com/user/"; // ########钱包模块的服务器####### owner.btcBaseUrl = "https://zhixinchains.com/btc/"; owner.ethBaseUrl = "https://zhixinchains.com/eth/"; owner.eosBaseUrl = "https://zhixinchains.com/eos/"; // 本地user地址 // 极光聊天本地地址 owner.Host_jm = "https://zhixinchains.com/imjg/" // owner.UserUrl = "http://192.168.105.82:10121/"; // // 本地登录地址 // owner.loginBaseUrl = "http://192.168.105.52:8101/"; // // ########钱包模块的服务器####### // owner.btcBaseUrl = "http://192.168.105.52:8301/"; // owner.ethBaseUrl = "http://192.168.105.52:8201/"; // owner.eosBaseUrl = "http://192.168.105.52:8401/"; //自选行情 owner.marketChoiceKey = "$market-choice"; //默认打开页面方式 owner.aniShow = "pop-in"; //已经预加载的页面 owner.preate = {}; //预加载页面过期时间(ms) owner.preateTimeout = 1000 * 60 * 5; // //预加载倒计时列表 // owner.timeouts = {}; //避免快速点击打开多个页面 owner.openw = null; /** * 存储数据到本地 * @param {String} key : 数据标识 * @param {Object} values : 数据 */ owner.setLocalStorage = function(key, values) { values = values || {}; if(typeof values == 'object') { localStorage.setItem(key, JSON.stringify(values)); } else { localStorage.setItem(key, values); } } /** * 获取本地存储数据 * @param {String} key : 数据标识 */ owner.getLocalStorage = function(key) { var settingsText = localStorage.getItem(key) || "{}"; return JSON.parse(settingsText); } /** * 根据key值删除存储数据 * @param {Object} key */ owner.removeLocalStorage = function(key) { localStorage.removeItem(key); } /** * 不合法数据格式化 * @param {String} val */ owner.escapeString = function(val) { if(val) { val = val.replace(/\\/g, "\\\\"); val = val.replace(/\"/g, "\\\""); val = val.replace(/\?/g, "?"); val = val.replace(/\n|\r|\t/g, function() { var a = arguments[0]; return(a == '\n') ? '\\n' : (a == '\r') ? '\\r' : (a == '\t') ? '\\t' : "" }); } return val; } /** * 不合法数据格式化 * @param {String} val */ owner.escapeValue = function(val) { if(val) { if($.isArray(val)) { // 数组类型 for(var i = 0, len = val.length; i < len; i++) { var value = val[i]; if(typeof value == 'string') { val[i] = owner.escapeString(value); // 设置新值 } } } else if(typeof val == 'string') { // 字符类型 val = owner.escapeString(val); // 设置新值 } // 其他不处理 } return val; } /** * form表单序列化 * @param {Document} formDcument : 表单dcument对象 */ owner.serialize = function(formDcument) { var valueList = []; //保存待处理的值,结构为: name , value var data = {}; //返回结果的json数组 //唯一值的 var queryCSS = "input[type='color'][name]" + ",input[type='date'][name]" + ",input[type='datetime'][name]" + ",input[type='datetime-local'][name]" + ",input[type='email'][name]" + ",input[type='hidden'][name]" + ",input[type='month'][name]" + ",input[type='number'][name]" + ",input[type='password'][name]" + ",input[type='range'][name]" + ",input[type='search'][name]" + ",input[type='tel'][name]" + ",input[type='text'][name]" + ",input[type='time'][name]" + ",input[type='url'][name]" + ",input[type='week'][name]" + ",input[type='radio'][name]:checked" + ",textarea[name]"; var onlyValList = formDcument.querySelectorAll(queryCSS); for(var i = 0; i < onlyValList.length; i++) { var dom = onlyValList[i]; var name = dom.getAttribute("name"); //键名 var value = owner.escapeString(dom.value); //值 data[name] = value; } //checkbox var checkboxList = formDcument.querySelectorAll("input[type='checkbox'][name]:checked"); var existCheckbox = {}; //已处理过的checkbox for(var i = 0; i < checkboxList.length; i++) { var name = checkboxList[i].getAttribute("name"); //判断是否已处理 if(existCheckbox[name]) { continue; } var value = new Array(); //获取相同的checkbox var doms = formDcument.querySelectorAll("input[type='checkbox'][name='" + name + "']:checked"); for(var j = 0; j < doms.length; j++) { var val = owner.escapeString(doms[j].value); value.push(val); } data[name] = value; existCheckbox[name] = true; } //select var selectList = formDcument.querySelectorAll("select[name]"); for(var i = 0; i < selectList.length; i++) { var dom = selectList[i]; var name = dom.getAttribute("name"); //键名 //多选select if(dom.getAttribute("multiple")) { var value = new Array(); for(j = 0; j < dom.length; j++) { if(dom.options[j].selected) { var val = owner.escapeString(dom[j].value); value.push(val); } } data[name] = value; } else { var index = dom.selectedIndex; var value = owner.escapeString(dom.options[index].value); data[name] = value; } } return data; } /** * * @param {Object} formDcument : form表单 * @param {Object} data : JS对象 */ owner.formFilling = function(formDcument, data) { //输入值的 var queryCSS = "input[type='color'][fillName]" + ",input[type='date'][fillName]" + ",input[type='datetime'][fillName]" + ",input[type='datetime-local'][fillName]" + ",input[type='email'][fillName]" + ",input[type='hidden'][fillName]" + ",input[type='month'][fillName]" + ",input[type='number'][fillName]" + ",input[type='password'][fillName]" + ",input[type='range'][fillName]" + ",input[type='search'][fillName]" + ",input[type='tel'][fillName]" + ",input[type='text'][fillName]" + ",input[type='time'][fillName]" + ",input[type='url'][fillName]" + ",input[type='week'][fillName]" + ",textarea[fillName]"; var fillOne = formDcument.querySelectorAll(queryCSS); for(var i = 0; i < fillOne.length; i++) { var dom = fillOne[i]; var fillName = dom.getAttribute("fillName"); //键名 var value = data[fillName]; //值 if(value) { //若有此值则填充数据 dom.value = data[fillName]; } } //radio,checkbox var fillTwo = formDcument.querySelectorAll("input[type='radio'][fillName],input[type='checkbox'][fillName]"); var existFillTwo = {}; //已处理过的 for(var i = 0; i < fillTwo.length; i++) { var dom = fillTwo[i]; var fillName = dom.getAttribute("fillName"); //键名 //判断是否已处理 if(existFillTwo[fillName]) { continue; } var value = data[fillName]; //值 if(value) { //若有此值 //判断是否是数组 if(typeof value === 'object' && Array == value.constructor) { for(var j = 0; j < value.length; j++) { var val = value[j]; //获取相同的radio,checkbox var domsCSS = "input[type='radio'][fillName='" + fillName + "'][value='" + val + "']" + ",input[type='checkbox'][fillName='" + fillName + "'][value='" + val + "']" var doms = formDcument.querySelectorAll(domsCSS); for(var k = 0; k < doms.length; k++) { //选中 doms[j].checked = true; } } } else { //获取相同的radio,checkbox var domsCSS = "input[type='radio'][fillName='" + fillName + "'][value='" + value + "']" + ",input[type='checkbox'][fillName='" + fillName + "'][value='" + value + "']" var doms = formDcument.querySelectorAll(domsCSS); for(var j = 0; j < doms.length; j++) { //选中 doms[j].checked = true; } } } existFillTwo[fillName] = true; } //select var selectList = formDcument.querySelectorAll("select[fillName]"); for(var i = 0; i < selectList.length; i++) { var dom = selectList[i]; var fillName = dom.getAttribute("fillName"); //键名 var value = data[fillName]; //值 if(value) { //若有此值 //判断是否是数组 if(typeof value === 'object' && Array == value.constructor) { for(j = 0; j < value.length; j++) { for(k = 0; k < dom.length; k++) { var opt = dom.options[k]; if(opt.value == value[j]) { opt.selected = true; } } } } else { for(j = 0; j < dom.length; j++) { var opt = dom.options[j]; if(opt.value == value) { opt.selected = true; break; } } } } } } /** * * @param {String} url : 页面地址 * @param {String} id :窗口标识 * @param {Object} styles : 窗口样式 * @param {Object} extras : 传递参数 * @param {String} aniShow : 显示方式 * @param {String} isHide : 是否显示 */ owner.openWin = function(url, id, styles, extras, aniShow, isHide) { //避免快速点击打开多个页面 if(owner.openw) { return null; } owner.openw = id; //默认是右进显示 aniShow || (aniShow = owner.aniShow); styles || (styles = {}); extras || (extras = {}); var page = plus.webview.create(url, id, styles, extras); page.addEventListener("loaded", function() { if(!isHide) { var data2 = new Date(); page.show(aniShow); } }, false); page.addEventListener("hide", function() { owner.openw = null; }, false); page.addEventListener("close", function() { owner.openw = null; }, false); return page; } /** * * @param {String} url : 页面地址 * @param {String} id :窗口标识 * @param {Object} styles : 窗口样式 * @param {Object} extras : 传递参数 * @param {String} aniShow : 显示方式 * @param {String} isHide : 是否隐藏 */ owner.preloadWin = function(url, id, styles, extras, aniShow, isHide) { //避免快速点击打开多个页面 if(owner.openw) { return null; } owner.openw = id; //默认是右进显示 aniShow || (aniShow = owner.aniShow); styles || (styles = {}); extras || (extras = {}); var page = owner.preate[id]; //若此页面已在预加载列表中 if(page) { page.show(aniShow); // delete owner.timeouts[id]; // clearTimeout(owner.timeouts[id]); return page; } else { styles.scrollIndicator = 'none'; //隐藏滚动条 styles.scalable = false; //窗口不可缩放 styles.popGesture = 'hide'; //右划隐藏 //预加载页面 page = mui.preload({ url: url, id: id, styles: styles, extras: extras }); page.addEventListener("loaded", function() { if(!isHide) { page.show(aniShow); } else { owner.openw = null; } }, false); owner.preate[id] = page; //页面隐藏监听, page.addEventListener("hide", function() { owner.openw = null; //默认页面隐藏过了一定时间后没有再次打开则关闭 // var timeout = setTimeout(function() { // page.close(); // }, owner.preateTimeout); // owner.timeouts[id] = timeout; }, false); //页面关闭监听 page.addEventListener("close", function() { owner.openw == id ? owner.openw = null : ""; delete owner.preate[id]; }, false); } return page; } owner.formatDate = function(time) { var date = new Date(time); var year = date.getFullYear(); var month = date.getMonth() + 1; var day = date.getDate(); var hours = date.getHours(); var minutes = date.getMinutes(); var seconds = date.getSeconds(); return year + "-" + (month < 10 ? ('0' + month) : month) + "-" + (day < 10 ? ('0' + day) : day) + " " + (hours < 10 ? ('0' + hours) : hours) + ":" + (minutes < 10 ? ('0' + minutes) : minutes) + ":" + (seconds < 10 ? ('0' + seconds) : seconds); } /** * 格式化eth显示 * @param {Object} eth */ owner.formatEth = function(eth) { if(eth == '0') { return eth; } var index = eth.indexOf('.'); if(index != -1) { var point = eth.substring(index + 1); if(point.length > 6) { eth = eth.substring(0, index + 7); eth = parseFloat(eth) + ''; } } return eth; } /** * 格式化cny显示 * @param {Object} cny */ owner.formatCny = function(cny) { if(cny == 0) { return cny; } cny += ""; var index = cny.indexOf('.'); if(index != -1) { var point = cny.substring(index + 1); if(cny.length > 2) { cny = cny.substring(0, index + 3); } } else { cny += '.00'; } return cny; } /** * 存储用户数据到本地 * @param {Object} values : 用户数据 */ owner.setUserLocalStorage = function(values) { values = values || {}; localStorage.setItem("userInfo", JSON.stringify(values)); } /** * 获取本地存储的用户数据 * @param {String} key : 数据标识 */ owner.getUserLocalStorage = function() { var settingsText = localStorage.getItem("userInfo") || "{}"; return JSON.parse(settingsText); } /** * 根据key值删除存储数据 * @param {Object} key */ owner.removeUserLocalStorage = function(key) { localStorage.removeItem("userInfo"); } /** * 存储Token * @param {Object} values : 用户数据 */ owner.setTokenStorage = function(values) { values = values || ''; localStorage.setItem("user_token", values); } /** * 获取Token * @param {String} key : 数据标识 */ owner.getTokenStorage = function() { return localStorage.getItem("user_token"); } /** * 删除Token * @param {Object} key */ owner.removeTokenStorage = function(key) { localStorage.removeItem("user_token"); } /** * 存储托管用户资金密码是否设置的标识 * @param {Object} values : 用户数据 */ owner.setIsWalletPassLocalStorage = function(values) { values = values || false; localStorage.setItem("isWalletPass", values); } /** * 获取托管用户资金密码是否设置的标识 * @param {String} key : 数据标识 */ owner.getIsWalletPassLocalStorage = function() { var isStatus = (localStorage.getItem("isWalletPass") == null || localStorage.getItem("isWalletPass") == 'false'); return isStatus ? false : true; } /** * 根据key值删除托用户资金密码是否设置的标识 * @param {Object} key */ owner.removeIsWalletPassLocalStorage = function() { localStorage.removeItem("isWalletPass"); } /** * 存储托管用户数据到本地 * @param {Object} values : 用户数据 */ owner.setCoinWalletInfoLocalStorage = function(values) { values = values || []; localStorage.setItem("ethWalletInfo", JSON.stringify(values)); } /** * 获取本地存储的托管用户数据 * @param {String} key : 数据标识 */ owner.getCoinWalletInfoLocalStorage = function() { var settingsText = localStorage.getItem("ethWalletInfo") || "[]"; return JSON.parse(settingsText); } /** * 根据key值删除托管用户存储数据 * @param {Object} key */ owner.removeCoinWalletInfoLocalStorage = function() { localStorage.removeItem("ethWalletInfo"); } /** * 存储托管用户数据到本地 * @param {Object} values : 用户数据 */ owner.setEthWalletTokenListLocalStorage = function(values) { values = values || []; localStorage.setItem("ethWalletTokenList", JSON.stringify(values)); } /** * 获取本地存储的托管用户数据 * @param {String} key : 数据标识 */ owner.getEthWalletTokenListLocalStorage = function() { var settingsText = localStorage.getItem("ethWalletTokenList") || "[]"; return JSON.parse(settingsText); } /** * 根据key值删除托管用户存储数据 * @param {Object} key */ owner.removeEthWalletTokenListLocalStorage = function() { localStorage.removeItem("ethWalletTokenList"); } /** * 存储用户数据到本地 * @param {Object} values : 用户数据 */ owner.setC2cUserLocalStorage = function(values) { values = values || {}; localStorage.setItem("c2cUserInfo", JSON.stringify(values)); } /** * 获取本地存储的用户数据 * @param {String} key : 数据标识 */ owner.getC2cUserLocalStorage = function() { var settingsText = localStorage.getItem("c2cUserInfo") || "{}"; return JSON.parse(settingsText); } /** * 根据key值删除存储数据 * @param {Object} key */ owner.removeC2cUserLocalStorage = function(key) { localStorage.removeItem("c2cUserInfo"); } /** * 存储托管用户数据到本地 * @param {Object} values : 用户数据 */ owner.setC2CCoinWalletInfoLocalStorage = function(values) { values = values || []; localStorage.setItem("ethC2CWalletInfo", JSON.stringify(values)); } /** * 获取本地存储的托管用户数据 * @param {String} key : 数据标识 */ owner.getC2CCoinWalletInfoLocalStorage = function() { var settingsText = localStorage.getItem("ethC2CWalletInfo") || "[]"; return JSON.parse(settingsText); } /** * 根据key值删除托管用户存储数据 * @param {Object} key */ owner.removeC2CCoinWalletInfoLocalStorage = function() { localStorage.removeItem("ethC2CWalletInfo"); } /** * 存储国际化标识 * @param {Object} values : 用户数据 */ owner.setLanguageLocalStorage = function(values) { values = values || "zh_CN"; localStorage.setItem("language", values); } /** * 获取国际化标识 * @param {String} key : 数据标识 */ owner.getLanguageLocalStorage = function() { var settingsText = localStorage.getItem("language") || "zh_CN"; return settingsText; } /** * 删除国际化标识缓存 * @param {Object} key */ owner.removeLanguageLocalStorage = function(key) { localStorage.removeItem("language"); } /** * 存储app汇率 * @param {Object} values : app最新版本 */ owner.setExchangeRateLocalStorage = function(values) { values = values || "CNY"; localStorage.setItem("$exchangeRate", values); } /** * app汇率 */ owner.getExchangeRateLocalStorage = function() { return localStorage.getItem("$exchangeRate") || "USD"; } /** * 存储app最新版本 * @param {Object} values : app最新版本 */ owner.setVersionLocalStorage = function(values) { values = values || ""; localStorage.setItem("$version", values); } /** * app最新版本 */ owner.getVersionLocalStorage = function() { return localStorage.getItem("$version") || ""; } /** * mui.toast重写 */ owner.toast = function(msg) { plus.nativeUI.toast(msg, { verticalAlign: 'center' }); } /** * 格式化数据值 * @param {Object} value */ owner.formatValue = function(value) { if(value == 0) return '0.000000'; var val = parseFloat(value); if(val < 0) { val = -val; } if(val < 0.0001) { val = compute.Mul(val, 1e8, 8); val = compute.Div(val, 1e8, 8); val = val.toFixed(8); } else if(val < 0.1) { val = compute.Mul(val, 1e6, 6); val = compute.Div(val, 1e6, 6); val = val.toFixed(6); } else if(val < 10) { val = compute.Mul(val, 1e4, 4); val = compute.Div(val, 1e4, 4); val = val.toFixed(4); } else { val = compute.Mul(val, 1e2, 2); val = compute.Div(val, 1e2, 2); val = val.toFixed(2); } return val; } /*** * 格式化数据值 - 通过字符串截取方式 * @param value 值 * @param decimal 小数最大长度 */ owner.formatValueStr = function (value, decimal) { //默认长度为8 if (decimal == null || decimal == '') { decimal = 8; } //防止NaN if (isNaN(value)) { return Number(0); } value = value.toString(); //小数点索引 var valueIndex = value.indexOf('.'); //存在小数的情况 if (valueIndex != -1) { //小数位数据 var valueFloat = value.substring(valueIndex + 1); //判断格式化数据大小,保留小数 value = parseFloat(value); if (value < 0.0001) { decimal = 8; } else if (value < 0.1) { decimal = 6; } else if (value < 10) { decimal = 4; } else { decimal = 2; } //小数位长度大于格式化长度 if (valueFloat.length > decimal) { //需要保留的小数位 + 1 var floatNum = parseFloat(value).toFixed(Number(decimal) + 1); //截取数据,保留小数并不用四舍五入 value = floatNum.substring(0, floatNum.length - 1); } } return parseFloat(value); } /*** * 简单的小函数,只做了+ 、- 、* 、/四则运算,第一、二个参数为参与运算的两个数,第三个参数为运算符(+ - * /) * 思路是运算前用字符串处理拿掉 '.' ,运算结束后还原倍数。 * https://www.cnblogs.com/superjsman/p/10049528.html * @param {Object} one * @param {Object} two * @param {Object} str */ owner.floatPoint = function(one, two, str) { //转化为字符串 one = '' + one two = '' + two //切割成整数部分和小数部分 var oneStr = one.split('.') var twoStr = two.split('.') // 处理参数一或二为整数的情况 if(!oneStr[1]) { oneStr[1] = '' } if(!twoStr[1]) { twoStr[1] = '' } var length = null //比较小数部分的长度,以确定剥离小数点后放大的倍数 var oneFloatLength = oneStr[1].length var TwoFloatLength = twoStr[1].length if(oneFloatLength > TwoFloatLength) { length = oneFloatLength twoStr[1] = twoStr[1].padEnd(length, '0') } else if(TwoFloatLength > oneFloatLength) { length = TwoFloatLength twoStr[1] = oneStr[1].padEnd(length, '0') } else { length = TwoFloatLength } // 拼接成处理后的数字 var oneBig = oneStr[0] + oneStr[1] var twoBig = twoStr[0] + twoStr[1] //根据运算符决定运算后缩小的倍数 var result = null switch(str) { case '+': ; case '-': result = eval(oneBig + str + twoBig) / (10 * length) break; case '*': result = eval(oneBig + str + twoBig) / (10 * (length * 2)) break; case '/': result = eval(oneBig + str + twoBig) } return result } /*** * 数组排序 * @param data 数据源 * @param sort 排序规则 ASC升序 | DESC倒序 * @param field 排序字段 * @returns {sortData} 排序后的数据 */ owner.sortArray = function(data, sort, field) { //数据源是否为空 if(data == null) { throw new Error('数据源为空!'); } //排序字段是否为空 if(field == null || field == '') { throw new Error('排序字段为空!'); } //默认排序为升序 if(sort == null || sort == '') { sort = 'ASC' } //排序逻辑函数 var sortFun = null; //升序排序逻辑函数 if(sort == 'ASC' || sort == 'asc') { sortFun = function(a, b) { return a[field] - b[field]; } } //倒序排序逻辑函数 if(sort == 'DESC' || sort == 'desc') { sortFun = function(a, b) { return b[field] - a[field]; } } //如果逻辑函数为空 if(sortFun == null) { throw new Error('排序参数异常!'); } //返回排序数据 return data.sort(sortFun); } }(window.app = {})); window.addEventListener("resize", function() { if(document.activeElement.tagName == "INPUT" || document.activeElement.tagName == "TEXTAREA") { document.activeElement.scrollIntoViewIfNeeded(); } }); /** * @method js控制input框只能输入数字和一位小数点和小数点后面n位小数 * * @param {Object} obj 文本框对象 * @param {Object} _decimals 小数点位数 */ function formatNumber(obj, _decimals) { obj.value = obj.value.replace(/[^\d\.]/g, ""); //清除“数字”和“.”以外的字符 if(/\d+\.\d*\./.test(obj.value)) { var secondPonitIndex = obj.value.indexOf(".", obj.value.indexOf(".") + 1); obj.value = obj.value.substring(0, secondPonitIndex); //只保留第一个. 清除多余的 } //obj.value = obj.value.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的 var reg = new RegExp("^(\\d+)\\.(\\d{" + _decimals + "}).*$"); obj.value = obj.value.replace(reg, '$1.$2'); //只能输入n个小数 if(obj.value.indexOf(".") < 0 && obj.value != "") { //以上已经过滤,此处控制的是如果没有小数点,首位不能为类似于 01、02的金额 obj.value = parseFloat(obj.value); } if(obj.value.indexOf(".") == 0) { //如果输入类似.123 变为0.123 obj.value = "0" + obj.value; } } /** * splitValue 获取当前时间 * @param value * @returns {array} */ function formatDate(date, fmt) { if (/(y+)/.test(fmt)) { fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length)); } var o = { 'M+': date.getMonth() + 1, 'd+': date.getDate(), 'h+': date.getHours(), 'm+': date.getMinutes(), 's+': date.getSeconds() }; for (var k in o) { if (new RegExp("(".concat(k, ")")).test(fmt)) { var str = o[k] + ''; fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? str : ('00' + str).substr(str.length)); } } return fmt; } var compute = { /* 函数,加法函数,用来得到精确的加法结果 说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。 参数:arg1:第一个加数;arg2第二个加数;d要保留的小数位数(可以不传此参数,如果不传则不处理小数位数) 调用:Calc.Add(arg1,arg2,d) 返回值:两数相加的结果 */ Add: function(arg1, arg2, d) { arg1 = arg1.toString(), arg2 = arg2.toString(); var arg1Arr = arg1.split("."), arg2Arr = arg2.split("."), d1 = arg1Arr.length == 2 ? arg1Arr[1] : "", d2 = arg2Arr.length == 2 ? arg2Arr[1] : ""; var maxLen = Math.max(d1.length, d2.length); var m = Math.pow(10, maxLen); var result = Number(((arg1 * m + arg2 * m) / m).toFixed(maxLen)); var d = arguments[2]; return typeof d === "number" ? Number((result).toFixed(d)) : result; }, /* 函数:减法函数,用来得到精确的减法结果 说明:函数返回较为精确的减法结果。 参数:arg1:第一个加数;arg2第二个加数;d要保留的小数位数(可以不传此参数,如果不传则不处理小数位数 调用:Calc.Sub(arg1,arg2) 返回值:两数相减的结果 */ Sub: function(arg1, arg2, d) { return this.Add(arg1, -Number(arg2), arguments[2]); }, /* 函数:乘法函数,用来得到精确的乘法结果 说明:函数返回较为精确的乘法结果。 参数:arg1:第一个乘数;arg2第二个乘数;d要保留的小数位数(可以不传此参数,如果不传则不处理小数位数) 调用:Calc.Mul(arg1,arg2) 返回值:两数相乘的结果 */ Mul: function(arg1, arg2, d) { var r1 = arg1.toString(), r2 = arg2.toString(), m, resultVal, d = arguments[2]; m = (r1.split(".")[1] ? r1.split(".")[1].length : 0) + (r2.split(".")[1] ? r2.split(".")[1].length : 0); resultVal = Number(r1.replace(".", "")) * Number(r2.replace(".", "")) / Math.pow(10, m); if(typeof d !== "number") { return Number(resultVal) } else { var beiTen = Math.pow(10, parseInt(d)); resultVal = (parseInt(resultVal * beiTen) / beiTen).toFixed(parseInt(d)); return Number(resultVal); } }, /* 函数:除法函数,用来得到精确的除法结果 说明:函数返回较为精确的除法结果。 参数:arg1:除数;arg2被除数;d要保留的小数位数(可以不传此参数,如果不传则不处理小数位数) 调用:Calc.Div(arg1,arg2) 返回值:arg1除于arg2的结果 */ Div: function(arg1, arg2, d) { var r1 = arg1.toString(), r2 = arg2.toString(), m, resultVal, d = arguments[2]; m = (r2.split(".")[1] ? r2.split(".")[1].length : 0) - (r1.split(".")[1] ? r1.split(".")[1].length : 0); resultVal = Number(r1.replace(".", "")) / Number(r2.replace(".", "")) * Math.pow(10, m); if(typeof d !== "number") { return Number(resultVal) } else { var beiTen = Math.pow(10, parseInt(d)); resultVal = (parseInt(resultVal * beiTen) / beiTen).toFixed(parseInt(d)); return Number(resultVal); } } };