js数值与日期相关业务校验方法

// 保留几位小数,不够位数自动补齐  (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'))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值