modules_number.js

/** @module Number */

/**
 * @method formatNumber
 * @description 格式化数值为特定格式
 * @param {Number} number 需要格式化的数值
 * @param {Number} [precision = 2] 保留小数点
 * @param {String} [thousand = ','] 千分位分隔符
 * @return {String}
 * @example
 * formatNumber(1000.22,1,',')
 * // '1,000.2'
 */
export function formatNumber(number, precision = 2, thousand = ",") {
    if (typeof number == "number" || (number -= 0)) {
        return (number.toFixed(precision) + "").replace(
            /\d{1,3}(?=(\d{3})+(\.\d*)?$)/g,
            "$&" + thousand
        );
    }
    return "0";
}

/**
 * @method getPercent
 * @description 获取百分比
 * @param {Number} value 数值
 * @param {Number} [total = 100] 总数值
 * @return {String} 百分比
 * @example
 * getPercent(0)
 * // 0%
 */
export function getPercent(value, total = 100) {
    if (total === 0 || (value === 0 && total === 0)) {
        return "100%";
    } else if (value === 0) {
        return "0%";
    } else {
        let percentValue = parseInt((value / total) * 10000) / 100;
        percentValue = percentValue < 0.01 ? 0.01 : percentValue;
        return `${percentValue}%`;
    }
}

/**
 * @method toFixed
 * @description 重新避免原函数精度不准的问题
 * @param {Number} num 数值
 * @param {Number} [s = 2] 保留小数点位数 默认为2
 * @return {String}
 * @example
 * toFixed(25.244)
 * // 25.24
 */
export function toFixed(num, s = 2) {
    const times = Math.pow(10, s);
    const des = num * times + 0.5;
    return parseInt(des, 10) / times + "";
}