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

JavaScript實(shí)現(xiàn)將阿拉伯?dāng)?shù)字轉(zhuǎn)換成中文或大寫中文的方法

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

1. 背景

現(xiàn)在有需求將億元之內(nèi)的阿拉伯?dāng)?shù)字轉(zhuǎn)換成中文,例如:1234轉(zhuǎn)換后變?yōu)橐磺Ф偃脑俎D(zhuǎn)換成壹仟貳佰叁拾肆。

2. 需求分析

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

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

2.1 數(shù)字分組

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

先看一個(gè)例子:

1234 -> 一千二百三十四

12340000 -> 一千二百三十四

規(guī)則:

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

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

function numToWords(num) {
    // 四位進(jìn)行分割
    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ù)組,每項(xiàng)轉(zhuǎn)換,對(duì)四位進(jìn)行處理。每一位對(duì)應(yīng)的單位不同,轉(zhuǎn)換后再進(jìn)行拼接即可。

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

  • 對(duì)于每一組數(shù)字,我們需要將其轉(zhuǎn)換為對(duì)應(yīng)的中文數(shù)字,并添加相應(yīng)的單位。
  • 對(duì)于四位數(shù)的每一位(個(gè)、十、百、千),我們有對(duì)應(yīng)的單位: ''(無(wú)單位,即個(gè)位)、、。
  • 對(duì)于更高位的組(萬(wàn)、億等),我們也有對(duì)應(yīng)的單位:萬(wàn)、等。

得到結(jié)果:

1234 -> 一千二百三十四

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

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

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

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

問題4: 如果100001000 得到一億零零零零萬(wàn)一千零零零 - 如果四位都是零則保留一個(gè)

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)在將四位進(jìn)行分割的數(shù)組,循環(huán)遍歷,添加大的單位。

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

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

2.4 大寫轉(zhuǎn)換

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

附上完整代碼:

function numToWords(num) {
    const map = {
        零: '睿',
        一: '壹',
        二: '貳',
        三: '叁',
        四: '肆',
        五: '伍',
        六: '陸',
        七: '柒',
        八: '捌',
        九: '玖',
        十: '拾',
        百: '佰',
        千: '仟',
        萬(wàn): '萬(wàn)',
        億: '億',
    }
    const bigUnits = ["", "萬(wàn)", "億"];
    const chars = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"];
    const units = ["", "十", "百", "千"];
    // 四位進(jìn)行分割
    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ù)字進(jìn)行四位分組,處理邊界零的情況,最后映射轉(zhuǎn)換。

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

相關(guān)文章

  • Javascript實(shí)現(xiàn)base64的加密解密方法示例

    Javascript實(shí)現(xiàn)base64的加密解密方法示例

    下文是base64用javascript寫出來(lái)的函數(shù)和方法。非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧
    2017-06-06
  • JavaScript基于Dom操作實(shí)現(xiàn)查找、修改HTML元素的內(nèi)容及屬性的方法

    JavaScript基于Dom操作實(shí)現(xiàn)查找、修改HTML元素的內(nèi)容及屬性的方法

    這篇文章主要介紹了JavaScript基于Dom操作實(shí)現(xiàn)查找、修改HTML元素的內(nèi)容及屬性的方法,涉及javascript dom模型及事件響應(yīng)相關(guān)操作技巧,需要的朋友可以參考下
    2017-01-01
  • JavaScript實(shí)例--實(shí)現(xiàn)計(jì)算器

    JavaScript實(shí)例--實(shí)現(xiàn)計(jì)算器

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)計(jì)算器,下面文章實(shí)現(xiàn)計(jì)算器作為學(xué)習(xí)期間的一個(gè)小練習(xí),需要的小伙伴可以參考一下,希望對(duì)你有所幫助
    2022-01-01
  • js讀取注冊(cè)表的鍵值示例

    js讀取注冊(cè)表的鍵值示例

    讀取注冊(cè)表的鍵值的方法有很多,在本文將為大家詳細(xì)介紹下使用js如何實(shí)現(xiàn)注冊(cè)表的鍵值讀取,感興趣的朋友可以參考下
    2013-09-09
  • js 一個(gè)關(guān)于圖片onload加載的事

    js 一個(gè)關(guān)于圖片onload加載的事

    前幾天一個(gè)項(xiàng)目讓我頭疼了很久,一個(gè)關(guān)于圖片加載時(shí)的loading效果,因?yàn)椴皇翘甹s,所以在網(wǎng)上各種找資料,但還是不理想,無(wú)賴苦心研究,終于有了一點(diǎn)眉目了,雖然個(gè)中還有一些道理不懂,至少目的達(dá)到了
    2013-11-11
  • textContent在Firefox下與innerText等效的屬性

    textContent在Firefox下與innerText等效的屬性

    textContent在Firefox下與innerText等效的屬性...
    2007-05-05
  • js實(shí)現(xiàn)飛機(jī)大戰(zhàn)小游戲

    js實(shí)現(xiàn)飛機(jī)大戰(zhàn)小游戲

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)飛機(jī)大戰(zhàn)小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • JavaScript實(shí)用工具庫(kù)lodash?使用

    JavaScript實(shí)用工具庫(kù)lodash?使用

    Lodash是一個(gè)JavaScript的實(shí)用工具庫(kù),提供了很多常用的函數(shù)和工具,可以幫助我們更方便地操作數(shù)據(jù)和處理邏輯,這篇文章主要介紹了lodash?使用,需要的朋友可以參考下
    2024-04-04
  • 在JavaScript中如何訪問暫未存在的嵌套對(duì)象

    在JavaScript中如何訪問暫未存在的嵌套對(duì)象

    這篇文章主要給大家介紹了關(guān)于在JavaScript中如何訪問暫未存在的嵌套對(duì)象的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用JavaScript具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 關(guān)于JavaScript的內(nèi)存與性能問題解決匯總

    關(guān)于JavaScript的內(nèi)存與性能問題解決匯總

    這篇文章主要介紹了關(guān)于JavaScript的內(nèi)存與性能問題解決匯總,在JavaScript中,頁(yè)面中事件處理程序的數(shù)量與頁(yè)面整體性能直接相關(guān),原因有很多,下面就一起來(lái)看看具體的總結(jié)吧
    2022-04-04

最新評(píng)論

绥德县| 景东| 牡丹江市| 邯郸县| 赣州市| 张家口市| 西城区| 赤壁市| 永城市| 宣威市| 横山县| 隆林| 寿阳县| 宽甸| 洛隆县| 黄梅县| 肇州县| 鹤庆县| 宿州市| 麻阳| 威海市| 潼关县| 枣庄市| 秦安县| 进贤县| 阿勒泰市| 华坪县| 盖州市| 新郑市| 迁西县| 闽清县| 蕲春县| 西林县| 涞水县| 绥宁县| 临桂县| 阿坝县| 横山县| 康定县| 修武县| 汤阴县|