@orca-fe/tools
Version:
front-end tools
49 lines (48 loc) • 1.44 kB
JavaScript
export function toFixedNumber(num, fractionDigits) {
if (!Number.isNaN(Number(num))) {
return Number(Number(num).toFixed(fractionDigits));
}
return num;
}
export function decimalLength(value) {
var str = String(value);
var pointPosition = str.indexOf('.');
if (pointPosition < 0) return 0;
return str.length - pointPosition - 1;
}
export function by(fn) {
return function (divisor, offset = 0) {
var decimalLen = decimalLength(divisor);
return function (num) {
return toFixedNumber(fn((num + offset) / divisor) * divisor - offset, decimalLen);
};
};
}
export var roundBy = by(Math.round);
export var floorBy = by(Math.floor);
export var ceilBy = by(Math.ceil);
/**
* 把一个值限制在一个上限和下限之间
* @param _num 当前数字
* @param lower 最小值
* @param upper 最大值
*/
export function clamp(_num, lower, upper) {
var num = _num;
// eslint-disable-next-line no-self-compare
if (num === num) {
if (upper !== undefined) {
// 如果上限制大于number,则number的值不变,反之,number赋值upper的值
num = num <= upper ? num : upper;
}
if (lower !== undefined) {
// 同样的,如果下限值小于number,则number值不变,防止,number赋值lower的值
num = num >= lower ? num : lower;
}
}
return num;
}
export function mix(x, y, _a) {
var a = clamp(_a, 0, 1);
return x * (1 - a) + y * a;
}