soEasy,前端小数加减乘除,不用插件,当然也可以啊!!!!!

255 阅读1分钟

前端小数加减乘除,不用插件,当然也可以啊!!!!!

总是遇到前端处理小数加减乘除,怎么办,再也不用烦恼了,也不用后端处理啦 添加过滤器有何不可

function add(a, b) {
  var c, d, e;
    try {
      c = parseFloat(a).toString().split(".")[1].length;
    } catch (f) {
      c = 0;
    }
    try {
      d = parseFloat(b).toString().split(".")[1].length;
    } catch (f) {
      d = 0;
    }
    return e = Math.pow(10, Math.max(c, d)), (mul(a, e) + mul(b, e)) / e;
}
add(1.12345,3.12345) // 4.2469

function sub(a, b) {
  var c, d, e;
    try {
      c = parseFloat(a).toString().split(".")[1].length;
    } catch (f) {
      c = 0;
    }
    try {
      d = parseFloat(b).toString().split(".")[1].length;
    } catch (f) {
      d = 0;
    }
    return e = Math.pow(10, Math.max(c, d)), (mul(a, e) - mul(b, e)) / e;
}
sub(4.18977987,1.85645) //2.33332987

function mul(a, b) {
  var c = 0,
      d = parseFloat(a).toString(),
      e = parseFloat(b).toString();
    try {
      c += d.split(".")[1].length;
    } catch (f) {}
    try {
      c += e.split(".")[1].length;
    } catch (f) {}
    return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c);
}
mul(1.7878,7.678678) //13.7279405284

function div(a, b) {
  var c, d, e = 0, f = 0;
    try {
      e = parseFloat(a).toString().split(".")[1].length;
    } catch (g) {}
    try {
      f = parseFloat(b).toString().split(".")[1].length;
    } catch (g) {}
    return c = Number(parseFloat(a).toString().replace(".", "")), d = Number(parseFloat(b).toString().replace(".", "")), mul(c / d, Math.pow(10, f - e));
}
div(3.998988,1.9898) //2.0097436928334504

取余

function Rem(a,b) {
    var  d;
    try {
        if(b.toString().indexOf('.') != -1){
            d = parseFloat(b).toString().split(".")[1].length;
        }else{
            d = 0;
        }
    } catch (f) {
        d = 0;
    }
   return mul(parseFloat(a) , Math.pow(10,d)) % mul(parseFloat(b) , Math.pow(10,d)) ;
}
Rem(500,3) // 2

截取小数位

function fixed(value,digits){
    if (value) {
        let num = parseFloat(value);
        return Math.floor(num * 10 ** digits) / 10 ** digits;
    }else{
        return (0).toFixed(digits);
    }
}
fixed('1.78978',3) //1.789

格式化百分比,保留两位小数

function ratio(value,digits = 2){
    if (value) {
       const data = util.mul(value,100).toFixed(digits);
       return `${data}%`
    }else{
        return '0.00%'
    }
}
ratio() // '0.00%'
ratio(-1.78979) // '-178.98%'
ratio(-0.1) // '-10.00%'

处理月份

function fmTime(value) {
    if (value) {
      const mStr = [
        "Jan",
        "Feb",
        "Mar",
        "Apr",
        "May",
        "Jun",
        "Jul",
        "Agu",
        "Sep",
        "Oct",
        "Nov",
        "Dec",
      ];
      const oTime = new Date(value);
      const day = oTime.getDate();
      const month = oTime.getMonth();
      return `${day} ${mStr[month]}`;
    }
    return value;
  }
  new Date('2011/10/23 10:35:45').getTime() //1319337345000
  fmTime(1319337345000) // '23 Oct'

本地时间转为对应时区时间

/***本地时间转为对应时区时间
 * @date date 本地日期
 * @zone  int 对应时区
 * ***/
function getZoneTime(date,zone){
  if(!date){return null;}
  var localTime = date.getTime(),
    localOffset = date.getTimezoneOffset()*60*1000,
    utc = localTime+localOffset,
    calctime=utc +(60*60*1000*zone),
    nd = new Date(calctime);
  return nd;
}
getZoneTime(new Date('2022/12/29 10:00:00'),4) 
//Thu Dec 29 2022 06:00:00 GMT+0800 (中国标准时间)


function dateFormat(date,fmt)
{
  if(!date) return "";
  var o = {
    "M+" : date.getMonth()+1,                 //月份
    "d+" : date.getDate(),                    //日
    "h+" : date.getHours(),                   //小时
    "m+" : date.getMinutes(),                 //分
    "s+" : date.getSeconds(),                 //秒
    "q+" : Math.floor((date.getMonth()+3)/3), //季度
    "S"  : date.getMilliseconds()             //毫秒
  };
  if(/(y+)/.test(fmt))
    fmt=fmt.replace(RegExp.$1, (date.getFullYear()+"").substr(4 - RegExp.$1.length));
  for(var k in o)
    if(new RegExp("("+ k +")").test(fmt))
      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
  return fmt;
}
dateFormat(new Date(),"yyyy/MM/dd  hh:mm:ss") // '2022/12/30  18:01:24'


function timeFormat(value,zone){
    if (!value) { return ""; }
    if (!zone) zone = 0;
    var d = getZoneTime(new Date(value), zone);
    return dateFormat(d, "yyyy/MM/dd  hh:mm:ss");
}
timeFormat(new Date('2022/12/29 10:00:00'),4)
// '2022/12/29  06:00:00'

姓名、电话、编号加密显示

function strFormat(val) {
    if(!val) return '';
    const strVal = val.toString();
    const len = strVal.length;
    return `${strVal.substring(0,2)}****${strVal.substring(len - 2,len)}`
}
strFormat(67868678687) //'67****87'