/**
* 说明:自定义的数字静态方法(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)
JS:自定义Number静态方法(任意数据强制转为数字)、实例方法(浮点数对比,转为Excel的列名)
于 2024-07-26 10:34:08 首次发布