// 保留几位小数,不够位数自动补齐 (num代表要处理的数值,floatNum代表保留小数位数)
function keepTwoDecimalFull(num, floatNum) {
let result = parseFloat(num);
if (isNaN(result)) {
console.log('传递参数错误,请检查!');
return false;
}
result = Math.round(num * (floatNum == 2 ? 100 : 10000)) / (floatNum == 2 ? 100 : 10000);
let s_x = result.toString(); //将数字转换为字符串
let pos_decimal = s_x.indexOf('.'); //小数点的索引值
// 当整数时,pos_decimal=-1 自动补0
if (pos_decimal < 0) {
pos_decimal = s_x.length;
s_x += '.';
}
// 当数字的长度< 小数点索引+2时,补0
while (s_x.length <= pos_decimal + floatNum) {
s_x += '0';
}
return s_x;
}
console.log(this.keepTwoDecimalFull(2.565, 2))
// 获取某个日期是第多少周 (val代表某个日期)
function getWeekNumber(val) {
const year = val.getFullYear() //获取年
const month = val.getMonth() + 1 //获取月
const day = val.getDate() //获取天
const isLeapYear = (year % 400 === 0) || (year % 4 === 0 && year % 100 !== 0) //判断是否为闰年
const second = isLeapYear ? 29 : 28
const monthList = [31, second, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31].splice(0, month - 1) //获取月份数组
let currentDays; //当前日期天数
let currentWeek; //当前周数
//计算天数
currentDays = month === 1 ? day : (monthList.reduce((t, v) => {
return t + v
}, 0)) + day
//计算是第几周
currentWeek = currentDays % 7 === 0 ? currentDays / 7 : Math.ceil(currentDays / 7)
return currentWeek
}
console.log(this.getWeekNumber(new Date('2023-01-01'))
/**
* 设置跌涨颜色
* val1: 对比的值
* val2: 当前显示的值
* */
function turnColor(val1, val2) {
var num1 = isNaN(Number(val1)) ? 0 : Number(val1)
var num2 = isNaN(Number(val2)) ? 0 : Number(val2)
// 判断是否是-0
if (num1 == 0 && num2 == 0 && (1 / num2 < 0)) {
return '#38BD22'
}
if (num1 == 0 && num2 == 0) {
return '#666666'
}
if (num1 > num2) {
return '#38BD22'
} else if (num1 < num2) {
return '#F33030'
} else {
return '#666666'
}
}
// digit: 保留小数位数 isRound: 是否四舍五入
function toDecimal(num, digit = 2, isRound = true) {
if (num === null || num === undefined) {
return ''
}
// 负数处理四舍五入,先转成正数
let sign = ''
if (num < 0) {
sign = '-'
}
num = Math.abs(num).toString()
// 出现了科学计数法
if (num.indexOf('e-') != -1) {
num = this.noKeXueJiShuFa(num)
}
const numArr = num.split('.')
if (numArr.length > 1) {
// 有小数时的处理
if (numArr[1].length <= digit) {
// 小数位数少于需保留位数的时候
return sign + Number(num).toFixed(digit)
} else {
// 小数位数多于需保留位数的时候
if (isRround) {
// 四舍五入处理
num =
numArr[1][digit] >= 5
? parseInt(this.noKeXueJiShuFa(num * Math.pow(10, digit))) + 1
: parseInt(this.noKeXueJiShuFa(num * Math.pow(10, digit)))
return sign + (num / Math.pow(10, digit)).toFixed(digit)
} else {
// 去除多于小数
return sign + `${numArr[0]}.${numArr[1].substring(0, digit)}`
}
}
} else {
// 无小数时的处理
return sign + Number(num).toFixed(digit)
}
}
function noKeXueJiShuFa(num) {
if (String(num).indexOf('e-') != -1) {
num = '0' + String(Number(num) + 1).substr(1)
}
return num
}
// 数值千分位分隔方法 digit:保留位数 isround:是否四舍五入
function money(value, digit = 2, isRround = true) {
var v = toDecimal(value, digit, isRround)
if (v.indexOf(',') == -1) {
v = v.replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,')
}
return v
}
console.log(money('-999990888767.295'))
// 没有四舍五入保留位数的千分位分隔方法
function handleMoney(num) {
let starts = "";
if (num.indexOf("-") > -1) {
starts = num.substring(0, 1)
num = num.substring(1, num.length)
}
let temps = num.toString().split("."), //处理浮点数的情况,整数时会返回原数值
target = temps[0].split("").reverse(), //倒序
lastIndex = target.length;
return starts + (target.map((item, index) => {
//第三个就增加一个',',要注意最后一个数字不添加
return (index + 1) % 3 === 0 && index !== lastIndex - 1
? "," + item
: item;
}).reverse() //倒序回来
.join("") + (temps[1] ? "." + temps[1] : "")
); //如果是浮点数,就再加上小数部分
}
console.log(handleMoney('-999990888767.375'))