// 数值转换为中文大写
// 参数：amount：需要转换的数值
export const NumberCapitalization = (amount) => {
    // 汉字的数字
    const cnNums = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
    // 基本单位
    const cnIntRadice = ['', '拾', '佰', '仟']
    // 对应整数部分扩展单位
    const cnIntUnits = ['', '万', '亿', '兆']
    // 对应小数部分单位
    const cnDecUnits = ['角', '分']
    // 整数金额时后面跟的字符
    const cnInteger = '整'
    // 整型完以后的单位
    const cnIntLast = '圆'
    // 最大处理的数字
    const maxNum = 9999999999999999.99
    // 金额整数部分
    let integerNum
    // 金额小数部分
    let decimalNum
    // 输出的中文金额字符串
    let chineseStr = ''
    // 分离金额后用的数组，预定义
    let parts
    if (amount === '') {
        return ''
    }
    amount = parseFloat(amount)
    amount = Math.abs(amount)
    if (amount >= maxNum) {
        // 超出最大处理数字
        return ''
    }
    if (amount === 0) {
        chineseStr = cnNums[0] + cnIntLast + cnInteger
        return chineseStr
    }
    // 转换为字符串
    amount = amount.toString()
    if (amount.indexOf('.') === -1) {
        integerNum = amount

        decimalNum = ''
    } else {
        parts = amount.split('.')
        integerNum = parts[0]
        decimalNum = parts[1].substr(0, 4)
    }
    // 获取整型部分转换
    if (parseInt(integerNum, 10) > 0) {
        let zeroCount = 0
        const IntLen = integerNum.length
        for (let i = 0; i < IntLen; i++) {
            const n = integerNum.substr(i, 1)
            const p = IntLen - i - 1
            const q = p / 4
            const m = p % 4
            if (n === '0') {
                zeroCount++
            } else {
                if (zeroCount > 0) {
                    chineseStr += cnNums[0]
                }
                // 归零
                zeroCount = 0
                // alert(cnNums[parseInt(n)])
                chineseStr += cnNums[parseInt(n)] + cnIntRadice[m]
            }
            if (m === 0 && zeroCount < 4) {
                chineseStr += cnIntUnits[q]
            }
        }
        chineseStr += cnIntLast
    }
    // 小数部分
    if (decimalNum !== '') {
        const decLen = decimalNum.length
        for (let i = 0; i < decLen; i++) {
            const n = decimalNum.substr(i, 1)
            if (n !== '0') {
                chineseStr += cnNums[Number(n)] + cnDecUnits[i]
            }
        }
    }
    if (chineseStr === '') {
        chineseStr += cnNums[0] + cnIntLast + cnInteger
    } else if (decimalNum === '') {
        chineseStr += cnInteger
    }
    return chineseStr
}

// 四舍五入保留2位小数（不够位数，则用0替补）
export const NumberTwoDecimal = (number) => {
    let result = parseFloat(number)
    if (isNaN(result)) {
        console.error('参数非数值，无法四舍五入保留两位小数！')
        return ''
    }
    result = Math.round(number * 100) / 100
    let s_x = result.toString()
    let pos_decimal = s_x.indexOf('.')
    if (pos_decimal < 0) {
        pos_decimal = s_x.length
        s_x += '.00'
    }
    if (isNaN(result)) {
        return ''
    } else {
        return parseFloat(s_x)
    }
    // while (s_x.length <= pos_decimal + 2) {
    //     s_x += '0'
    // }
}

// 四舍五入保留10位小数（不够位数，则用0替补）
export const NumberTenDecimal = (number) => {
    let result = parseFloat(number)
    if (isNaN(result)) {
        console.error('参数非数值，无法四舍五入保留两位小数！')
        return ''
    }
    result = Math.round(number * 10000000000) / 10000000000
    let s_x = result.toString()
    let pos_decimal = s_x.indexOf('.')
    if (pos_decimal < 0) {
        pos_decimal = s_x.length
        s_x += '.00'
    }
    // while (s_x.length <= pos_decimal + 10) {
    //     s_x += '0'
    // }
    if (isNaN(result)) {
        return ''
    } else {
        return parseFloat(s_x)
    }
}
