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

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

 更新時間:2024年11月05日 11:23:23   作者:碼嘍的自我修養(yǎng)  
現(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)橐磺Ф偃脑俎D(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ù)的每一位(個、十、百、千),我們有對應的單位: ''(無單位,即個位)、、
  • 對于更高位的組(萬、億等),我們也有對應的單位:等。

得到結(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)文章

  • JS實現(xiàn)上傳圖片的三種方法并實現(xiàn)預覽圖片功能

    JS實現(xiàn)上傳圖片的三種方法并實現(xiàn)預覽圖片功能

    在用戶注冊頁面,需要用戶在本地選擇一張圖片作為頭像,并同時預覽,實現(xiàn)思路有兩種,具體實現(xiàn)方法和實例代碼大家參考下本文
    2017-07-07
  • JavaScript編程設計模式之觀察者模式(Observer Pattern)實例詳解

    JavaScript編程設計模式之觀察者模式(Observer Pattern)實例詳解

    這篇文章主要介紹了JavaScript編程設計模式之觀察者模式(Observer Pattern),簡單說明了觀察者模式的概念、原理并結(jié)合實例形式詳細給出了觀察者模式的相關(guān)實現(xiàn)與使用技巧,需要的朋友可以參考下
    2017-10-10
  • JavaScript中不可忽略的Symbol的盤點

    JavaScript中不可忽略的Symbol的盤點

    Symbol類型的出現(xiàn),為每個屬性賦予了獨一無二的標識符,無論項目多么復雜,Symbol都能確保屬性鍵的絕對唯一性,下面我們就來看看JavaScript中那些不可忽略的Symbol吧
    2024-12-12
  • js跳轉(zhuǎn)頁面方法總結(jié)

    js跳轉(zhuǎn)頁面方法總結(jié)

    本篇文章主要是對js跳轉(zhuǎn)頁面方法進行了詳細的總結(jié)介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • 一種基于瀏覽器的自動小票機打印實現(xiàn)方案(js版)

    一種基于瀏覽器的自動小票機打印實現(xiàn)方案(js版)

    這篇文章主要介紹了一種基于瀏覽器的自動小票機打印實現(xiàn)方案(js版)的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • javascript 獲取圖片顏色

    javascript 獲取圖片顏色

    html 5.0的canvas可以獲取到圖片的像素點了。這樣,我們可以做很多以圖片有關(guān)的操作和渲染了。當然今后也會給瀏覽器渲染引擎更高的要求。(YY, 什么時候html渲染引擎也支持多核和GPU呢?)
    2009-04-04
  • JavaScript實現(xiàn)圖片瀑布流和底部刷新

    JavaScript實現(xiàn)圖片瀑布流和底部刷新

    這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)圖片瀑布流和底部刷新,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Javascript中的相等與不等運算

    Javascript中的相等與不等運算

    在 javascript 中,可以使用 == 來比較兩個數(shù)據(jù)是否相等,如果兩個數(shù)據(jù)的類型不同,那么,將在進行轉(zhuǎn)換后進行比較
    2010-04-04
  • js獲取URL的參數(shù)的方法(getQueryString)示例

    js獲取URL的參數(shù)的方法(getQueryString)示例

    getQueryString方法默認返回的是 string如果是int類型,則JS使用的時候,要進行轉(zhuǎn)換一下,下面有個不錯的示例,大家可以參考下
    2013-09-09
  • 禁止你的左鍵復制實用技巧

    禁止你的左鍵復制實用技巧

    左鍵復制對于所有人來說有好有壞,例如原創(chuàng)內(nèi)容就不想被別人復制,接下來介紹一種方法,有需要的朋友可以參考下
    2013-01-01

最新評論