//千分位加逗号 const thousands = (num) => { let suff; let pre; if(num){ num = num +''; [pre,suff] = num.split('.') if(pre.length <= 3) return num; pre = pre.split('').reverse() for(let i in pre){ if(i>1 && i%3 === 0){ pre[i] = pre[i]+','; } } return pre.reverse().join('')+(suff ? ('.'+suff):''); } return num; } //保留小数位数 const decimal = (num,digit) => { let suff; let pre; //千分位会加入,导致scienceNum 转换NAN, 建议先使用decimal, 再用thousands num = scienceNum(num) if(num=='NaN' || !num){ num=0} if(num){ num = num +''; [pre,suff] = num.split('.') if(suff === undefined) { let zero = ''; for(let i=0; idigit){ suff = suff.substr(0,digit) } if(suff) return pre + '.' + suff else return pre } return num; } // 两个数据相减计算精度 const accMinus = (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); } // 两个数据相加计算精度 const accAdd = (arg1,arg2)=>{ var r1,r2,m; 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)); return (arg1*m+arg2*m)/m; } export const accMul = (arg1,arg2) => { if(!arg1 || !arg2){return 0} 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); } const accDev = (arg1, arg2) => { if(!arg1 ||(!arg2) ){ return 0 } 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) {} r1 = Number(arg1.toString().replace(".", "")) r2 = Number(arg2.toString().replace(".", "")) let num= (r1 / r2) * Math.pow(10, t2 - t1); return Math.round(num) } //判断是否是科学技术法,是则转化string const scienceNum = (amount) => { var num = 0; var result = []; amount = amount ? new String(amount) : new String(0); if((amount.indexOf('E') != -1) || (amount.indexOf('e') != -1)) { (amount.indexOf('E') != -1)? num = amount.indexOf('E'):num = amount.indexOf('e'); var decimal = amount.substr(0, num); // devide the sentice efficial number var decArr = decimal.split('.',2); // total 10 power var power = amount.substr(num+1,amount.length); // symbol + - var symbol = power.substr(0,1); power = power.substr(1, power.length); power = power * 1.0; if('+' == symbol) { // the number of 0 is power - decArr[1] power = power - decArr[1].length; // the return data while(power > 0) { result.unshift(0); power -= 1; } result.unshift(decArr[1] * 1.0); result.unshift(decArr[0] * 1.0); } else { if(decArr[1]){ var decArrlen = decArr[1].length }else{ var decArrlen=1 } power = power - decArrlen ; var result = [0]; result.push('.'); while(power > 0) { result.push(0); power -= 1; } result.push(decArr); } result.join(""); result = result + ''; amount = result.replace(/,/g,''); } // number类型 会省略小数部分 末尾的0 如 0.0003750 , 返回字符串更好 // else{ // amount = Number(amount); // } return amount; } // 拆分(大于0小于1的数) 小数部分 0 与 非0 const splitZero = (item) => { let zero, nonZero; if(scienceNum(item).includes('.') && scienceNum(item).split('.')[0] == 0){ const str = scienceNum(item).split('.')[1] const len = str.length let num = 0 for(let i=0; i 0) break; num = i+1; } zero = str.substring(0,num); nonZero = str.substr(num); return { zero:zero, nonZero:nonZero} } else { return false } } // 拆分非整数的 小数部分 与 整数部分 const splitIntDec = (item) => { let integer, decimal; if(scienceNum(item).includes('.')){ integer = scienceNum(item).split('.')[0]; decimal = scienceNum(item).split('.')[1]; return { integer:integer, decimal:decimal} } else { return { integer:item || 0, decimal:0} } } // const disabledFn = (num,min,max,reta)=>{ if(max && num>max){ return true } if(min && num0){ return true } return false } //get方法url拼接 const paramsFn = (obj)=>{ let params = '' for (let it in obj) { params += it + '=' + obj[it] + '&' } return params.substring(0,params.length-1) } const fixedTo = (num, fixed) => { //保留整数位 if (fixed == -1 && num.indexOf('.')) { return ((num + '').split('.')[0]) } let price = num let maxLength = price.indexOf('.'); let reg = "/^(\d?)+(\.\d{0,2})?$/" let reg2 = "/\.{2,}/g" if (fixed) { reg = reg.replace("2", fixed) reg2 = reg2.replace("2", fixed) } if (price.indexOf(".") < 0 && price != "") { price = parseFloat(price); } else if (price.indexOf(".") == 0) { //'首位小数点情况' price = price.replace(/[^$#$]/g, "0."); price = price.replace(eval(reg2), "."); } else if (!(eval(reg).test(price))) { //去掉最后一位 // price = price.substring(0, price.length - 1) fixed = fixed ? fixed : 2 if (price.split('.')[1].length > fixed) { price = (1 * price).toFixed(fixed) } } return price } const uuid = () => { let date = new Date(); let y = date.getFullYear(); let m = date.getMonth() + 1; m = m < 10 ? ('0' + m) : m; let d = date.getDate(); d = d < 10 ? ('0' + d) : d; let h = date.getHours(); h = h < 10 ? ('0' + h) : h; let minute = date.getMinutes(); let second = date.getSeconds(); let millsecond = date.getMilliseconds(); minute = minute < 10 ? ('0' + minute) : minute; second = second < 10 ? ('0' + second) : second; return y + '' + m + '' + d+''+h+''+minute+''+second + '' + millsecond + '' + Math.floor(Math.random()*1000000); }; const timestampToTime=(timestamp,type)=> { let date = new Date(timestamp);//时间戳为10位需*1000,时间戳为13位的话不需乘1000 let Y = date.getFullYear() + '-'; let M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-'; let D = date.getDate() + ' '; let h = date.getHours() + ':'; let m = date.getMinutes() + ':'; let s = date.getSeconds(); if(type==='yy-mm-dd'){ return Y+M+D }else if(type==='mm-dd'){ return M+D }else { return Y+M+D+h+m+s; } } const timeStr=(val,type)=>{ let date = new Date(val);//时间戳为10位需*1000,时间戳为13位的话不需乘1000 let Y = date.getFullYear() ; let M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1); let D = date.getDate()<10 ? '0'+date.getDate() : date.getDate(); let linkLine = type ? '.' : '-'; if(type===2){ return Y + linkLine + M }else{ return M+linkLine+D } } function getDefault(value){ if(value === 0 || value === '0'){ return value; }else { return value || '-' } } function formatter(value,m){ let date = new Date();//时间戳为10位需*1000,时间戳为13位的话不需乘1000 let h = date.getHours(); if(value){ return value }else{ if(h>m){ return '-' }else{ return '' } } } export default { thousands ,decimal,accMinus,accAdd,accDev,scienceNum,splitZero,splitIntDec,disabledFn,paramsFn,fixedTo,uuid,timestampToTime, getDefault,timeStr,accMul,formatter}