最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)換,對四位進行處理。每一位對應(yīng)的單位不同,轉(zhuǎn)換后再進行拼接即可。

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

  • 對于每一組數(shù)字,我們需要將其轉(zhuǎn)換為對應(yīng)的中文數(shù)字,并添加相應(yīng)的單位。
  • 對于四位數(shù)的每一位(個、十、百、千),我們有對應(yīng)的單位:''(無單位,即個位)、、。
  • 對于更高位的組(萬、億等),我們也有對應(yīng)的單位:、等。
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
    }
    // 處理重復(fù)零,末尾零情況
    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 映射到對應(yīng)的中文數(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)文章

  • JavaScript實現(xiàn)左右滾動電影畫布

    JavaScript實現(xiàn)左右滾動電影畫布

    這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)左右滾動電影畫布,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • 二級域名或跨域共享Cookies的實現(xiàn)方法

    二級域名或跨域共享Cookies的實現(xiàn)方法

    適用于Asp。 在主域名設(shè)置的Cookie,在各子域名共用;適用于博客等提供二級域名。這個問題,以網(wǎng)上有眾多帖子,可惜都沒有完整解決。
    2008-08-08
  • javascript下拉框選項單擊事件的例子分享

    javascript下拉框選項單擊事件的例子分享

    這篇文章主要分享了一些javascript下拉框選項單擊事件的例子,以及在例子中遇到的問題的解決方法,十分實用,推薦給小伙伴們參考下。
    2015-03-03
  • 原生js+cookie實現(xiàn)購物車功能的方法分析

    原生js+cookie實現(xiàn)購物車功能的方法分析

    這篇文章主要介紹了原生js+cookie實現(xiàn)購物車功能的方法,結(jié)合實例形式分析了javascript結(jié)合cookie存儲實現(xiàn)購物車功能的相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12
  • Webpack打包速度優(yōu)化方案匯總

    Webpack打包速度優(yōu)化方案匯總

    Webpack 打包速度優(yōu)化是提升開發(fā)效率和構(gòu)建效率的關(guān)鍵,以下是系統(tǒng)化的優(yōu)化方案,從基礎(chǔ)配置到高級技巧全面覆蓋,并通過代碼示例講解的非常詳細,需要的朋友可以參考下
    2025-04-04
  • Three.js開發(fā)之Fog組件知識整理

    Three.js開發(fā)之Fog組件知識整理

    在Threejs中Fog類用于創(chuàng)建線性霧的效果,霧效果常用于模擬真實世界中視覺深度遞減的效果,也可以用于創(chuàng)建某些藝術(shù)效果,這篇文章主要介紹了Three.js?Fog?組件知識的相關(guān)資料,需要的朋友可以參考下
    2025-07-07
  • JavaScript中數(shù)組sort()方法的基本使用與踩坑記錄

    JavaScript中數(shù)組sort()方法的基本使用與踩坑記錄

    : js中用方法sort()為數(shù)組排序,這篇文章主要給大家介紹了關(guān)于JavaScript中數(shù)組sort()方法的基本使用,sort()方法已經(jīng)可以滿足我們對數(shù)組的很多處理需求,需要的朋友可以參考下
    2021-06-06
  • 通過循環(huán)優(yōu)化 JavaScript 程序

    通過循環(huán)優(yōu)化 JavaScript 程序

    這篇文章主要介紹了通過循環(huán)優(yōu)化 JavaScript 程序,對于提高 JavaScript 程序的性能這個問題,最簡單同時也是很容易被忽視的方法就是學(xué)習(xí)如何正確編寫高性能循環(huán)語句。下面我們來學(xué)習(xí)一下吧
    2019-06-06
  • javascript數(shù)據(jù)類型中的一些小知識點(推薦)

    javascript數(shù)據(jù)類型中的一些小知識點(推薦)

    這篇文章主要介紹了javascript數(shù)據(jù)類型中的一些小知識點,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • tree?shaking功能及使用原理詳細解析

    tree?shaking功能及使用原理詳細解析

    這篇文章主要為大家介紹了tree?shaking功能及使用原理詳細解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪的相關(guān)資料
    2023-01-01

最新評論

松原市| 临湘市| 夏津县| 云龙县| 和静县| 台湾省| 怀化市| 夏津县| 荣成市| 靖宇县| 三原县| 监利县| 滨州市| 苗栗市| 西峡县| 勐海县| 苏尼特右旗| 波密县| 大名县| 新密市| 宁阳县| 沁阳市| 通城县| 泰和县| 黄浦区| 铜山县| 万年县| 昌宁县| 河源市| 乌拉特中旗| 渑池县| 图们市| 社会| 崇信县| 彩票| 南江县| 平果县| 讷河市| 衡南县| 商南县| 南和县|