前端小数加减乘除,不用插件,当然也可以啊!!!!!
总是遇到前端处理小数加减乘除,怎么办,再也不用烦恼了,也不用后端处理啦 添加过滤器有何不可
加
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'