欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript實現(xiàn)將阿拉伯數(shù)字轉(zhuǎn)換成中文大寫

 更新時間:2024年05月07日 11:07:30   作者:一諾滾雪球  
現(xiàn)在有需求將億元之內(nèi)的阿拉伯數(shù)字轉(zhuǎn)換成中文,例如:1234轉(zhuǎn)換后變?yōu)橐磺Ф偃脑俎D(zhuǎn)換成壹仟貳佰叁拾肆,所以本文給大家介紹了用JavaScript實現(xiàn)將阿拉伯數(shù)字轉(zhuǎn)換成中文大寫,感興趣的小伙伴跟著小編一起來看看吧

1. 背景

現(xiàn)在有需求將億元之內(nèi)的阿拉伯數(shù)字轉(zhuǎn)換成中文,例如:1234轉(zhuǎn)換后變?yōu)?code>一千二百三十四再轉(zhuǎn)換成壹仟貳佰叁拾肆。

2. 需求分析

以下是對這些規(guī)則的分析:

  • 數(shù)字分組
  • 單位映射
  • 零的處理
  • 中文數(shù)字映射
  • 轉(zhuǎn)換邏輯

2.1 數(shù)字分組

  • 將數(shù)字從低位到高位,每四位分為一組。例如,12345678 可以分為 12, 345, 678。
  • 最高位可能不足四位,如 1234,則直接作為一組處理。

先看一個例子:

1234 -> 一千二百三十四

12340000 -> 一千二百三十四

規(guī)則:

  • 當是四位以內(nèi)時,則是千百十表示
  • 超過四位時,則是將前幾位按照規(guī)則1表示,后面加上萬的單位

通過上述可以得到,將轉(zhuǎn)換的數(shù)字先進行四位拆分。

function numToWords(num) {
    // 四位進行分割
    const numStr = num.toString().replace(/(?=(\d{4})+$)/g, ',')
        .split(',')
        .filter(Boolean)
}

拆分情況:

123456 -> ,12,3456 -> ['',12,3456] -> [12,3456]

2.2 處理四位轉(zhuǎn)換

循環(huán)拆分后的數(shù)組,每項轉(zhuǎn)換,對四位進行處理。每一位對應的單位不同,轉(zhuǎn)換后再進行拼接即可。

接下來處理四位轉(zhuǎn)換:

  • 對于每一組數(shù)字,我們需要將其轉(zhuǎn)換為對應的中文數(shù)字,并添加相應的單位。
  • 對于四位數(shù)的每一位(個、十、百、千),我們有對應的單位:''(無單位,即個位)、、。
  • 對于更高位的組(萬、億等),我們也有對應的單位:等。
const chars = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"];
const units = ["", "十", "百", "千"];
function _transform(n) {
    let result = ''
    for (let i = 0; i < n.length; i++) {
        // 轉(zhuǎn)換漢字
        const c = chars[+n[i]];
        // 加單位 得到單位
        let u = units[n.length - 1 - i]
        result += c + u
    }
    return result
}

得到結(jié)果:

1234 -> 一千二百三十四

問題1: 如果是1203,得到一千二百零十三 - 需要處理如果是0 則不需要帶單位

問題2: 如果1003,得到一千零零三

  • 則需要將連續(xù)的零保留一個

問題3: 如果1200 得到一千二百零零 - 需要去除末尾的零

問題4: 如果100001000 得到一億零零零零萬一千零零零 - 如果四位都是零則保留一個

const chars = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"];
const units = ["", "十", "百", "千"];
function _handleZero(str) {
    return str.replace(/零{2,}/g, '零').replace(/零+$/, '')
}
function _transform(n) {
// 處理四位全部為0
    if (n === '0000') {
        return chars[0]
    }
    let result = ''
    for (let i = 0; i < n.length; i++) {
        // 轉(zhuǎn)換漢字
        const c = chars[+n[i]];
        // 加單位 得到單位
        let u = units[n.length - 1 - i]
        // 處理0不加單位
        if (c === chars[0]) {
            u = ''
        }
        result += c + u
    }
    // 處理重復零,末尾零情況
    return _handleZero(result)
}

2.3 循環(huán)分割數(shù)組,添加單位

現(xiàn)在將四位進行分割的數(shù)組,循環(huán)遍歷,添加大的單位。

  • 從低位到高位遍歷數(shù)字的每一位。
  • 對于每一位,根據(jù)其在組中的位置(個、十、百、千)和組在整體數(shù)字中的位置(無單位、萬、億等),選擇正確的單位和中文數(shù)字進行拼接。
  • 處理邊界情況
function numToWords(num) {
    // 四位進行分割
    const numStr = num.toString().replace(/(?=(\d{4})+$)/g, ',')
        .split(',')
        .filter(Boolean)
        
    const bigUnits = ["", "萬", "億"];
    let result = ''
    for (let i = 0; i < numStr.length; i++) {
        const part = numStr[i];
        const c = _transform(part)
        let u = bigUnits[numStr.length - i - 1];
        // 也是需要考慮當四位為0的情況不需要添加單位
        if (c === chars[0]) {
            u = ''
        }
        result += c + u
    }
    result = _handleZero(result)
    return result
}

至此轉(zhuǎn)換成中文就結(jié)束。

2.4 大寫轉(zhuǎn)換

  • 需要一個映射表,將阿拉伯數(shù)字 0-9 映射到對應的中文數(shù)字 零-九 以及大寫形式 壹-玖。
const map = {
    零: '零',
    一: '壹',
    二: '貳',
    三: '叁',
    四: '肆',
    五: '伍',
    六: '陸',
    七: '柒',
    八: '捌',
    九: '玖',
    十: '拾',
    百: '佰',
    千: '仟',
    萬: '萬',
    億: '億',
}
// 最后結(jié)果轉(zhuǎn)換下即可
result.split('').map(s => map[s]).join('')

附上完整代碼:

function numToWords(num) {
    const map = {
        零: '睿',
        一: '壹',
        二: '貳',
        三: '叁',
        四: '肆',
        五: '伍',
        六: '陸',
        七: '柒',
        八: '捌',
        九: '玖',
        十: '拾',
        百: '佰',
        千: '仟',
        萬: '萬',
        億: '億',
    }
    const bigUnits = ["", "萬", "億"];
    const chars = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"];
    const units = ["", "十", "百", "千"];
    // 四位進行分割
    const numStr = num.toString().replace(/(?=(\d{4})+$)/g, ',')
        .split(',')
        .filter(Boolean)

    let result = ''
    for (let i = 0; i < numStr.length; i++) {
        const part = numStr[i];
        const c = _transform(part)
        let u = bigUnits[numStr.length - i - 1];
        console.log('打印***numStr.length - i - 1', numStr.length - i - 1)
        if (c === chars[0]) {
            u = ''
        }
        result += c + u
        console.log('打印***c', c, u, part)
    }
    result = _handleZero(result)
    // 處理一十情況
    if (result === '一十') {
        result = '十'
    }

    return result.split('').map(s => map[s]).join('')

    function _handleZero(str) {
        return str.replace(/零{2,}/g, '零').replace(/零+$/, '')
    }

    function _transform(n) {
        if (n === '0000') {
            return chars[0]
        }

        let result = ''
        for (let i = 0; i < n.length; i++) {
            // 轉(zhuǎn)換漢字
            const c = chars[+n[i]];
            // 加單位 得到單位
            let u = units[n.length - 1 - i]
            if (c === chars[0]) {
                u = ''
            }
            result += c + u
        }
        return _handleZero(result)
    }
}

3. 總結(jié)

最后總結(jié)一波:數(shù)字轉(zhuǎn)換中文的核心就是將數(shù)字進行四位分組,處理邊界零的情況,最后映射轉(zhuǎn)換。

以上就是JavaScript實現(xiàn)將阿拉伯數(shù)字轉(zhuǎn)換成中文大寫的詳細內(nèi)容,更多關(guān)于JavaScript阿拉伯數(shù)字轉(zhuǎn)中文大寫的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 比較全面的event對像在IE與FF中的區(qū)別 推薦

    比較全面的event對像在IE與FF中的區(qū)別 推薦

    整理的比較全的event對像在ie與firefox瀏覽器中的區(qū)別。
    2009-09-09
  • javascript局部自定義鼠標右鍵菜單

    javascript局部自定義鼠標右鍵菜單

    這篇文章主要為大家詳細介紹了javascript局部自定義鼠標右鍵菜單,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • js中實例與對象的區(qū)別講解

    js中實例與對象的區(qū)別講解

    今天小編就為大家分享一篇關(guān)于js中實例與對象的區(qū)別講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • JS前端導出Excel的方法詳解

    JS前端導出Excel的方法詳解

    最近寫管理端的需求,發(fā)現(xiàn)有一個excel導出的需求,所以正好本文就來和大家分享一下導出excel文件的三種實現(xiàn)方式,感興趣的小伙伴可以了解一下
    2023-07-07
  • JavaScript實現(xiàn)文本中間縮略的兩種方案

    JavaScript實現(xiàn)文本中間縮略的兩種方案

    項目中經(jīng)常會遇到縮略展示文字的場景,即要求文字在一行不換行展示,超出自動展示...,常用的展示效果有兩種,文字中間縮略以及文字末尾縮略,本文將通過代碼示例給大家詳細的講一下這兩種方案,需要的朋友可以參考下
    2024-06-06
  • 詳解Bootstrap四種圖片樣式

    詳解Bootstrap四種圖片樣式

    本文給大家介紹Bootstrap 對圖片的支持,Bootstrap提供了四個可對圖片應用簡單樣式的class,對Bootstrap四種圖片class相關(guān)知識感興趣的朋友一起學習吧
    2016-01-01
  • JS設置緩存和緩存過期時間的操作方法

    JS設置緩存和緩存過期時間的操作方法

    js-cookie是一個用于處理瀏覽器Cookie的JavaScript庫,本文通過實例代碼講解JS設置緩存和緩存過期時間的操作方法,感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • CSS或者JS實現(xiàn)鼠標懸停顯示另一元素

    CSS或者JS實現(xiàn)鼠標懸停顯示另一元素

    這篇文章主要介紹了CSS或者JS實現(xiàn)鼠標懸停顯示另一元素的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • 代碼短小的js div層拖動實現(xiàn)代碼[兼容IE與Firefox]

    代碼短小的js div層拖動實現(xiàn)代碼[兼容IE與Firefox]

    代碼短小的js div層拖動實現(xiàn)代碼[兼容IE與Firefox],需要的朋友可以參考下.
    2010-05-05
  • Javascript?中?var?和?let?、const?的區(qū)別及使用方法

    Javascript?中?var?和?let?、const?的區(qū)別及使用方法

    ECMAScript 變量是松散類型的,意思是變量可以用于保存任何類型的數(shù)據(jù),每個變量只不過是一個用于保存任意值的命名占位符,這篇文章主要介紹了Javascript?中?var?和?let?、const?的區(qū)別以及具體使用效果,需要的朋友可以參考下
    2023-01-01

最新評論