/**
 * 折中方案：处理浮点失真，如果页面卡顿，则需要服务处理
 * @param val 
 * @param decimal 需要保留小数位 默认2 
 * @param maxCount 最大小数位 超过的时候需要对数值进行处理 
 * @returns 
 */
export function getDecimalsNum(val: any, decimal = 2, maxCount = 6) {
    let result = val
    if (typeof val === 'number') {
        const str = val.toString();
        if (str.includes('.')) {
            const num = str.indexOf('.') + 1;
            const count = str.length - num;
            if (count > maxCount) {
                result = val.toFixed(decimal)
            }
        }
    }
    return result
}

/**
 * 强制保留小数位，不足位数自动补零
 * @param value 
 * @param decimal 保留小数位
 * @param round 是否四舍五入
 * @returns 
 */
export function formatDecimal(value: number, decimal = 2, round = true) {
    if (decimal <= 0) {
        if (round) {
            return Math.round(value);
        }
        return Math.trunc(value);
    } else {
        if (round) {
            return Number(value.toFixed(decimal));
        }

        let num = value.toString();
        const index = num.indexOf('.');

        if (index < 0) {
            // 小数位自动补零
            if (decimal > 0) {
                const count = num.length;
                num += '.';
                while (num.length <= count + decimal) {
                    num += '0';
                }
            }
        }

        const result = num.substring(0, decimal + index + 1);
        return Number(result);
    }
}

/**
 * 数字转千位符金额
 * @param value 金额数值
 * @param decimal 保留小数位 默认2 
 */
export function formatAmount(value: number, decimal = 2) {
    const reg = new RegExp('(\\d)(?=(\\d{3})+$)', 'ig');
    const result = value.toFixed(decimal).toString().split('.');
    result[0] = result[0].replace(reg, '$1,');
    return result.join('.');
}