JS:自定义Number静态方法(任意数据强制转为数字)、实例方法(浮点数对比,转为Excel的列名)

/**
 * 说明:自定义的数字静态方法(3)、实例方法(2)
 * 注意:参数说明开头若已'(xxx)'开头表示默认值
 * 注意:Object.insert()为自定义静态方法,功能与Object.assign()一致但不会覆盖已有属性
 * 其它:如果补充的属性不想被修改或删除,请调用Object.freeze()方法
 */
Object.insert(Number, {
  /**
   * 把任意数据转为区间内的整数
   * @param {*} n 要转化的数据
   * @param {Number} min (0)最小值:会强制转为数字
   * @param {Number} max (0)最大值:会强制转为数字
   * @param {Boolean} isAdd (假=不增加)如果转化的数据小于最小值,是否加一次最大值(类似倒数)
   * @returns {Number} 一定不是NaN
   */
  parse: function (n, min, max, isAdd) {
    min = +min || parseFloat(min) || 0
    max = +max || parseFloat(max) || 0
    if (max < min) {
      const t = max
      max = min
      min = t
    }
    n = +n || parseFloat(n) || min
    if (isAdd && n < min) n += max
    return Math.min(Math.max(n, min), max)
  },
  /**
   * 把数据转为整数
   * @param {*} n 要转化的数据
   * @param {Number} max 最大值:必须是合法的具体数字,否则一律返回NaN
   * @returns {Number}
   */
  parseToMax: function (n, max) {
    return Math.min(+n || parseFloat(n) || max, max)
  },
  /**
   * 把数据转为整数
   * @param {*} n 要转化的数据
   * @param {Number} min 最小值:必须是合法的具体数字,否则一律返回NaN
   * @returns {Number}
   */
  parseToMin: function (n, min) {
    return Math.max(+n || parseFloat(n) || min, min)
  },
})
Object.freeze(Number)

Object.insert(Number.prototype, {
  /**
   * 判断两个数字是否相同
   * 常用于:浮点数比较
   * @param {Number} n 与之对比的数字
   * @returns {Boolean}
   */
  isSame: function (n) {
    return Math.abs(this - n) < Number.EPSILON
  },
  /**
   * 把数字转为excel表的列名
   * @return {string} 仅有大写字母的字符串
   */
  toExcelColumn: function () {
    let r = '', t = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    while (n > 0) {
      n--
      r = t[n % 26] + r
      n = Math.floor(n / 26)
    }
    return s
  },
})
Object.freeze(Number.prototype)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值