国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用JavaScript將數(shù)字格式化成千分位的n種方法

這篇具有很好參考價(jià)值的文章主要介紹了使用JavaScript將數(shù)字格式化成千分位的n種方法。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1,使用數(shù)組方法:

1) 數(shù)字轉(zhuǎn)字符串,字符串按照小數(shù)點(diǎn).分割

2) 整數(shù)部分拆分成字符串?dāng)?shù)組,并倒敘

3) 遍歷, 按照每三位添加逗號,號

4) 拼接整數(shù)部分+小數(shù)部分

function format_width_array(number) { // 將數(shù)字轉(zhuǎn)換為千分位字符串
    const arr = String(number).split('.');
    // 整數(shù)部分(數(shù)組格式) => split將字符串轉(zhuǎn)換為數(shù)組
    const int = arr[0].split('');
    // 小數(shù)點(diǎn)右邊的數(shù)字部分
    const float = arr[1] || '';
    let r = ''
    // 倒敘并遍歷 
    int.reverse().forEach(function (v, i) {
        // 非第一位并且是位值是3的倍數(shù), 添加','
        if (i !== 0 && i % 3 === 0) {
            r += v + ','
        }
        else {
            // 正常添加字符
            r += v
        }
    })
    return `${r}${!!float ? '.' + float : ''}`
}
console.log(format_width_array('938765432.02098'))

2.使用字符串的substring截取

1) 數(shù)字轉(zhuǎn)字符串,并按照小數(shù)點(diǎn)’.’分割

2) 整數(shù)部分對3取模,獲取余數(shù), 獲得substring(0, 余數(shù))的字符串片段r

3) 按照/3截整數(shù)商為lenth遍歷,每次循環(huán), 字符串片段拼接新的片段: 以下標(biāo)(余數(shù)+i*3)開始, 結(jié)束下標(biāo)在開始下標(biāo)的基礎(chǔ)上加上3

4) 當(dāng)/3沒有余數(shù)時(shí), 要去掉字符串首位多出來的逗號','

5) 拼接整數(shù)部分+小數(shù)部分

// 字符串substring截取:
function format_with_substring(number) {
    // 數(shù)字轉(zhuǎn)字符串并按.分割
    const arr = String(number).split('.')
    const int = arr[0] || '';
    const float = arr[1] || ''

    // 多余的位數(shù)
    const f = int.length % 3

    // 獲取多余的位數(shù),f可能是0,則r可能是空字符串
    let r = int.substring(0, f)
    // 除以3取商, 取整
    const len = Math.floor(int.length / 3)
    for (let i = 0; i < len; i++) {
        r += `,${int.substring(f + i * 3, f + (i + 1) * 3)}`
    }
    // 多余的位數(shù)
    if (f === 0) {
        // 去掉下標(biāo)0的','
        r = r.substring(1)
    }

    // 整數(shù)部分和小數(shù)部分拼接
    return `${r}${!!float ? '.' + float : ''}`
}
console.log(format_with_substring('938765432.02098'))

3.除法+求模

1) 值對1000求模,獲得最高三位

2) 值除以1000,值是否大于1判斷是否結(jié)束

3) 重復(fù)1)和2),直到退出

4) 拼接整數(shù)部分 + 小數(shù)部分

/**
 * ~是js里的按位取反操作符 , ~~ 就是執(zhí)行兩次按位取反,其實(shí)就是保持原值,但是注意雖然是原值,但是對布爾型變量執(zhí)行這個(gè)操作,會(huì)轉(zhuǎn)化成相應(yīng)的數(shù)值型變量,也就是
~~true === 1,~~false === 0。 ~~"" == 0 ~~[] == 0

padStart和padEnd是類似的用法,padEnd是向后補(bǔ)位,padStart是在前邊補(bǔ)位。
 */
function format_width_mod(number) {
    let n = Number(number)
    let r = ''
    let temp = null;
    do {
        // 求模的值, 用于獲取最高三位,這里可能有小數(shù)
        mod = n % 1000;
        // 值是否大于1,是繼續(xù)的條件
        n = n / 1000
        // 高三位
        temp = ~~mod; // ~~轉(zhuǎn)化為數(shù)值變量
        // 1. 填充: n>1循環(huán)未結(jié)束, 就要填充為 比如: 1 => 001,
        // 不然1 001, 就會(huì)變成11,
        // 2.拼接','
        r = (n >= 1 ? `${String(temp).padStart(3, '0')}` : temp)
            + (!!r ? `,${r}` : '')
        console.log(r, 'r=====')
    } while (n >= 1)
    const strNumber = String(number)
    const index = strNumber.indexOf('.')
    // 拼接小數(shù)部分
    if (index >= 0) {
        r += strNumber.substring(index)
    }
    return r
}
console.log(format_width_mod('1001.02098'))

4.正則

1) 利用正則前瞻:?exp1(?=exp2) 查找exp2前面的exp1

2) 將整數(shù)部分格式化為千分位

3) 拼接整數(shù)部分和小數(shù)部分文章來源地址http://www.zghlxwxcb.cn/news/detail-758891.html

function format_width_regex(number) {
    const reg = /\d{1,3}(?=(\d{3})+$)/g
    // $&指的是匹配的內(nèi)容, 符合正則表達(dá)式的內(nèi)容加','
    const strNumber = number + '';
    const int = Math.floor(strNumber)
    const floatPart = strNumber.substring(strNumber.indexOf('.')) || ''
    return String(int).replace(reg, '$&,') + floatPart;
}
console.log(format_width_regex('1001.02098'))
console.log(format_width_regex('938765432.02098'))

function format_width_regex2(number) {
    // exp1(?=exp2) 查找查找exp2前面的exp1
    const reg = /\d{1,3}(?=(\d{3})+)/g 
    const reg2 = /^(\d+)\.(\d+)$/;
    const strNumber = number + '';
    const int = strNumber.replace(reg2, '$1') || ''
    const float = reg2.test(strNumber) ? strNumber.replace(reg2, '$2') : ''
    return int.replace(reg, function (match, ...args) {
        console.log(match, ...args, '打印====')
        return match + ','
    }) + (float.padStart(float.length > 0 ? float.length + 1 : 0, '.'))
}
console.log(format_width_regex2(900))
console.log(format_width_regex2('1000'))
console.log(format_width_regex2('1001.02098'))
console.log(format_width_regex2('938765432.02098'))

function format_width_regex3(number) {
    // 匹配的是后面是3*n個(gè)數(shù)字的非單詞邊界(\B)
    const reg = /\B(?=(?:\d{3})+(?!\d))/g
    const reg2 = /^(\d+)\.(\d+)$/;
    const strNumber = number + '';
    const int = strNumber.replace(reg2, '$1') || ''
    const float = reg2.test(strNumber) ? strNumber.replace(reg2, '$2') : ''
    return int.replace(reg, function (match, ...args) {
        return match + ','
    }) + (float.padStart(float.length > 0 ? float.length + 1 : 0, '.'))
}
console.log(format_width_regex3(900))
console.log(format_width_regex3('1000'))
console.log(format_width_regex3('1001.02098'))
console.log(format_width_regex3('938765432.02098'))



/**
要理解?=和?!,首先需要理解前瞻,后顧,負(fù)前瞻,負(fù)后顧四個(gè)概念:

// 前瞻:
exp1(?=exp2) 查找exp2前面的exp1
// 后顧:
(?<=exp2)exp1 查找exp2后面的exp1
// 負(fù)前瞻:
exp1(?!exp2) 查找后面不是exp2的exp1
// 負(fù)后顧:
(?<!exp2)exp1 查找前面不是exp2的exp1 */
function format_with_Intl(number, minimumFractionDigits, maximumFractionDigits) {
    const strNumber = number + '';
    const float = /\./.test(strNumber) ? strNumber.split('.')[1]: '';
    minimumFractionDigits = minimumFractionDigits || float.length || 2
    maximumFractionDigits = maximumFractionDigits || float.length || 2
    maximumFractionDigits = Math.max(minimumFractionDigits, maximumFractionDigits)
    return new Intl.NumberFormat('en-us', {
        maximumFractionDigits,
        minimumFractionDigits
    }).format(number)
}
console.log(format_with_Intl(900))
console.log(format_with_Intl('1000'))
console.log(format_with_Intl('1001.02098'))
console.log(format_with_Intl('938765432.02098'))

到了這里,關(guān)于使用JavaScript將數(shù)字格式化成千分位的n種方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • java格式化數(shù)字 NumberFormat及DecimalFormat

    java格式化數(shù)字 NumberFormat及DecimalFormat

    NumberFormat幫助您格式化和解析任何區(qū)域設(shè)置的數(shù)字。您的代碼可以完全獨(dú)立于小數(shù)點(diǎn),千位分隔符的區(qū)域設(shè)置約定,甚至是使用的特定十進(jìn)制數(shù)字,或者數(shù)字格式是否為十進(jìn)制。 DecimalFormat是NumberFormat十進(jìn)制數(shù)字格式的具體子類 。它具有多種功能,旨在解析和格式化任何語言

    2024年02月02日
    瀏覽(17)
  • 跟著hsp學(xué)springmvc--數(shù)字格式化介紹

    跟著hsp學(xué)springmvc--數(shù)字格式化介紹

    比如通過表單提交數(shù)據(jù)給springmvc時(shí),輸入的”28“字符串就會(huì)自動(dòng)地轉(zhuǎn)成Integer類型的數(shù)據(jù)保存在Model中 對于特殊數(shù)據(jù)類型和字符串的轉(zhuǎn)換要使用注解 比如日期(@DateTimeFormat),貨幣(@NumberFormat)等等。 注解中的pattern可以指定輸入的數(shù)據(jù)格式,如果不滿足格式則會(huì)報(bào)錯(cuò)。 驗(yàn)

    2024年02月06日
    瀏覽(44)
  • java中的數(shù)字的格式化(超詳細(xì))

    數(shù)字的格式化在解決實(shí)際問題時(shí)使用非常普遍,如顯示某超市的商品價(jià)格,需要保留兩位小數(shù)。Java 主要對浮點(diǎn)型數(shù)據(jù)進(jìn)行數(shù)字格式化操作,其中浮點(diǎn)型數(shù)據(jù)包括 double 和 float 型數(shù)據(jù),在 java 中常用以下方法: 目錄 ? ? ? ?// 方法一 :DecimalFormat轉(zhuǎn)換最簡便 #.00 表示兩位小數(shù)

    2024年02月16日
    瀏覽(27)
  • 【Java LocalDateTime】LocalDateTime獲取時(shí)間信息、格式化、轉(zhuǎn)換為數(shù)字時(shí)間戳

    文章目錄 正文 ? ? ? ? 一、描述 ????????二、基本使用 1、獲取LocalDateTime時(shí)間 2、時(shí)間比較 3、獲取基本時(shí)間信息: 4、格式化 /?反格式化 5、轉(zhuǎn)換為數(shù)字時(shí)間戳 6、數(shù)字時(shí)間戳轉(zhuǎn)為LocalDateTime ????????LocalDateTime是Java 8引入的日期和時(shí)間API (java.time包)中的一個(gè)類, 不包含

    2024年02月03日
    瀏覽(22)
  • DBeaver中使用外部格式化程序?qū)M(jìn)行sql格式化

    DBeaver中使用外部格式化程序?qū)M(jìn)行sql格式化

    本文介紹了如何在DBeaver中使用pgFormatter、sqlprase、sqlformatter等外部格式化程序?qū)ql進(jìn)行格式化。 目錄 一、pgFormatter 1.準(zhǔn)備工作 2.DBeaver中進(jìn)行配置 二、sqlprase 1.準(zhǔn)備工作 2.在DBeaver中配置 三、sql-formatter 1.準(zhǔn)備工作 2.在DBeaver中配置 pgFormatter本質(zhì)是perl腳本,所以需要perl運(yùn)行環(huán)境支

    2024年01月25日
    瀏覽(123)
  • 使用vscode格式化文檔無效(vue代碼格式化文檔無效)

    使用vscode格式化文檔無效(vue代碼格式化文檔無效)

    問題: 最近在寫代碼的時(shí)候,vscode使用格式化文檔不管用。 原因: 單頁面使用大量element組件和html代碼導(dǎo)致,vscode識(shí)別不了。 解決方案: 1、 打開設(shè)置,點(diǎn)擊右側(cè)的圖標(biāo)打開settings.json文件,在文件中注入代碼。 settings.json文件位置,vscode左下角: ?設(shè)置頁面右上角: ?在

    2024年02月16日
    瀏覽(94)
  • vue3 codemirror關(guān)于 sql 和 json格式化的使用以及深入了解codemirror 使用json格式化提示錯(cuò)誤的關(guān)鍵代碼。包含了json格式化沒有效果和json格式化提示錯(cuò)誤

    vue3 codemirror關(guān)于 sql 和 json格式化的使用以及深入了解codemirror 使用json格式化提示錯(cuò)誤的關(guān)鍵代碼。包含了json格式化沒有效果和json格式化提示錯(cuò)誤

    后端返回一個(gè)json字符串,里面有value1、value2指定字段渲染sql語句,其他渲染json語句。 jsonlint 和 jsonlint-mod 的區(qū)別 簡單理解:jsonlint校驗(yàn)json格式化是否有效,jsonlint-mod用來格式化后同時(shí)校驗(yàn)json格式化是否有效。 (1)JSONLint是一種可以驗(yàn)證JSON格式是否有效的工具。 它可以檢查

    2024年04月28日
    瀏覽(93)
  • 在VS中使用格式化工具

    在VS中使用格式化工具

    官網(wǎng)地址: https://clang.llvm.org/ 最后更新時(shí)間:2023.8.25 這里以windows為例,使用的環(huán)境為VS。 下載地址: https://github.com/llvm 安裝(自己選擇安裝路徑) 在VS中設(shè)置LLVM的 clang-format.exe 路徑 到這里我們需要理解clang-format.exe是一個(gè)格式化程序,它里面有一些格式化規(guī)則,我們現(xiàn)在需要

    2024年02月11日
    瀏覽(24)
  • Linux磁盤查看,使用(分區(qū)、格式化、掛載)

    Linux磁盤查看,使用(分區(qū)、格式化、掛載)

    目錄 0、觀察磁盤分區(qū)狀態(tài):lsblk、blkid、parted 0.1? lsblk列出系統(tǒng)上的所有磁盤列表 0.2? blkid列出設(shè)備的UUID等參數(shù) 0.3? parted列出磁盤的分區(qū)表類型與分區(qū)信息 1、磁盤分區(qū):gdisk、fdisk 1.1? fdisk 2、磁盤格式化(創(chuàng)建文件系統(tǒng)):mkfs 3、文件系統(tǒng)掛載 3.1.1? 手動(dòng)掛載:mount 3.1.2

    2023年04月24日
    瀏覽(23)
  • 關(guān)于使用JS獲取當(dāng)前時(shí)間并格式化輸出

    關(guān)于使用JS獲取當(dāng)前時(shí)間并格式化輸出

    (1)逐個(gè)提取并拼接字符串 (2)一步到位提取年月日時(shí)分秒(重點(diǎn)) 首先,提取數(shù)據(jù)到數(shù)據(jù) 然后,拼接數(shù)據(jù)格式化輸出 (附上,過程剖析)

    2024年02月03日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包