四兩撥千斤,一招搞定數字格式化問題

2022-02-16 02:53:24 字數 4099 閱讀 3623

今天在處理乙個數字的格式顯示問題時,遇到下面的一些需求:

如下圖,如果勾選的話就使能該項設定。

百分比和小數字數比較好解決,百分比只需要在源數字後面加兩個零再加上百分號;小數只需要在小數點後面加零即可。最主要的是千分符的處理,好,就來說千分符。

數字千分符的處理有很多處理方案,最主要的有下面幾種。

思路:

將數字轉換成字串,然後倒序遍歷取值,每取3個字元插入乙個,逗號,直到遍歷到第乙個字元。

**很簡單,如下:

function numberformat(num) 

count++;

}return result;

}numberformat(12345678); // 12,345,678

思路:該正則的思路就是從數字的第乙個字元開始找,找到滿足該數字後面的數字個數為3的倍數的這個數字,然後在該數字替換成數字,的形式,然後繼續往下找......

語法如下:

let regexp = /(\d)(?=(\d)+$)/g;
示例:

string(12345678).replace(/(\d)(?=(\d)+$)/g, "$1,");
解釋:首先\d表示數字,然後以?=(\d)+結尾的即滿足條件。所以最主要是這個?=(\d)+表示式。

正向**?=n,表示匹配任何其後緊接指定字串 n 的字串。 再結合\d表示,如果乙個數字後面滿足字串n這個規則,那麼就將匹配到的這個數字(假如是1)替換成1,

所以現在的問題是字串n這個規則是什麼,是(\d)+這個東西,這個表示數字的個數為3的倍數(倍數為1~n之間)。

所以整個表示式的意思就是:從第乙個數字開始看起,看這個數字後面的數字個數是不是3的倍數,是的話將這個數字(假如是1)替換成1,的形式,然後繼續下乙個數字直到結尾。

說明:

根據 mdn 解釋,number.tolocalestring()方法返回這個數字number在特定語言環境下的表示字串。

簡單的使用:

var number = 3500;

console.log(number.tolocalestring()); // 3,500

我們直接呼叫該函式就可以得到問題的結果。但其實,該函式的功能不止於此,這就需要分析它的引數了。

語法:

numobj.tolocalestring([locales [, options]])
locales

一般可以填下面幾個數值:

options

options物件的屬性就有很多了,下面列舉乙個常用的屬性。

而這些屬性不僅可以滿足文章開頭提出的問題,也可以滿足我們日常常用到的數字的格式表示。那麼我們就來康康怎麼使用吧!

示例:

number(123).tolocalestring('zh-cn', ) // 00123.00
number(123).tolocalestring('zh-cn', ) // 12,300.00%
number(123).tolocalestring('zh-cn', ) // €123.00
最後,如果看完有收穫,就動動小手點個贊再走唄,筆芯。

今天在處理乙個數字的格式顯示問題時,遇到下面的一些需求:

如下圖,如果勾選的話就使能該項設定。

百分比和小數字數比較好解決,百分比只需要在源數字後面加兩個零再加上百分號;小數只需要在小數點後面加零即可。最主要的是千分符的處理,好,就來說千分符。

數字千分符的處理有很多處理方案,最主要的有下面幾種。

思路:

將數字轉換成字串,然後倒序遍歷取值,每取3個字元插入乙個,逗號,直到遍歷到第乙個字元。

**很簡單,如下:

function numberformat(num) 

count++;

}return result;

}numberformat(12345678); // 12,345,678

思路:該正則的思路就是從數字的第乙個字元開始找,找到滿足該數字後面的數字個數為3的倍數的這個數字,然後在該數字替換成數字,的形式,然後繼續往下找......

語法如下:

let regexp = /(\d)(?=(\d)+$)/g;
示例:

string(12345678).replace(/(\d)(?=(\d)+$)/g, "$1,");
解釋:首先\d表示數字,然後以?=(\d)+結尾的即滿足條件。所以最主要是這個?=(\d)+表示式。

正向**?=n,表示匹配任何其後緊接指定字串 n 的字串。 再結合\d表示,如果乙個數字後面滿足字串n這個規則,那麼就將匹配到的這個數字(假如是1)替換成1,

所以現在的問題是字串n這個規則是什麼,是(\d)+這個東西,這個表示數字的個數為3的倍數(倍數為1~n之間)。

所以整個表示式的意思就是:從第乙個數字開始看起,看這個數字後面的數字個數是不是3的倍數,是的話將這個數字(假如是1)替換成1,的形式,然後繼續下乙個數字直到結尾。

說明:

根據 mdn 解釋,number.tolocalestring()方法返回這個數字number在特定語言環境下的表示字串。

簡單的使用:

var number = 3500;

console.log(number.tolocalestring()); // 3,500

我們直接呼叫該函式就可以得到問題的結果。但其實,該函式的功能不止於此,這就需要分析它的引數了。

語法:

numobj.tolocalestring([locales [, options]])
locales

一般可以填下面幾個數值:

options

options物件的屬性就有很多了,下面列舉乙個常用的屬性。

而這些屬性不僅可以滿足文章開頭提出的問題,也可以滿足我們日常常用到的數字的格式表示。那麼我們就來康康怎麼使用吧!

示例:

number(123).tolocalestring('zh-cn', ) // 00123.00
number(123).tolocalestring('zh-cn', ) // 12,300.00%
number(123).tolocalestring('zh-cn', ) // €123.00
最後,如果看完有收穫,就動動小手點個贊再走唄,筆芯。

程式設計師不要總想著四兩撥千斤

2020 年是很魔幻的一年,但好在這特殊的一年中,經歷了一些事情,閱讀了一些書籍,終於明白了一些之前的困惑。因為覺得自己這些感悟可能具備一些普適性,所以作本文和大家一起分享。經常會有 拿 35 歲來製造年齡焦慮,但現實生活中,我也見過不少超過 35 歲的程式設計師。在中國幾十年前是沒有程式設計師,就...

程式設計師不要總想著四兩撥千斤

2020 年是很魔幻的一年,但好在這特殊的一年中,經歷了一些事情,閱讀了一些書籍,終於明白了一些之前的困惑。因為覺得自己這些感悟可能具備一些普適性,所以作本文和大家一起分享。經常會有 拿 35 歲來製造年齡焦慮,但現實生活中,我也見過不少超過 35 歲的程式設計師。在中國幾十年前是沒有程式設計師,就...

程式設計師不要總想著四兩撥千斤

大概程式設計師選擇入行時,都想著自己要從事的是乙份高科技工作,所以從意識上就有意無意賦予了自身一些特殊的象徵,但很多時候這種強加的意義讓自己焦慮不已。我經常在想,當李鴻章第一次面對美國的高樓大廈時,他心理是什麼樣的衝擊感。那些在清朝能建高樓大廈的人算不算高科技人才?那些能建立現代船舶 火車 汽車的人...