//千分位加逗号
|
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; i<digit; i++){
|
zero = zero + '0'
|
}
|
suff = zero
|
}
|
else if(suff && suff.length < digit){
|
let zero = '';
|
for(let i=0; i<(digit-suff.length); i++){
|
zero = zero + '0'
|
}
|
suff = suff + zero
|
}
|
else if(suff.length>digit){
|
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<len; i++){
|
if(str[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 && num<min) {
|
return true
|
}
|
if(reta && num%reta>0){
|
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}
|