記得有朋友在csdn裡問如何格式化乙個數值字串,比如"457354745",格式化成"457,354,745.00"。其中有很多朋友給出了自己的解析函式。其實win32 中有現在的api可以解決這個問題。這個api函式就是:
int getnumberformat(
lcid
locale
, // locale
dword
dwflags
, // options
lpctstr
lpvalue
, // input number string
const numberfmt
*lpformat
, // formatting information
lptstr
lpnumberstr
, // output buffer
intcchnumber
// size of output buffer
);locale:
數值字元的本地格式化。有兩個值:
locale_system_default
default system locale.
locale_user_default
default user locale
dwflags:可以控制函式的行為。如果lpformat為null,那這個引數必須設定為null。
如果lpformat為null,則可以設定這個引數為locale_nouseroverride來呼叫系統預設的數值字元格式化。
比如:char szbuf[100];
getbumberformat(locale_user_default,
locale_nouseroverride,
"57684347",
0,szbuf,100);
結果szbuf返回值"57,684,347.00"
lpformat
:指向numberfmt
結構的指標。下面再詳細解釋.
lpnumberstr
:指標乙個字元緩衝區,返回已經格式化好的字元。
cchnumber
:lpnumberstr
指向的字元緩衝區的大小,以字元計算。
現在來詳細的介紹一下
numberfmt結構的成員:
typedef struct _numberfmt numberfmt, *lpnumberfmt;
numdigits
:小數點的個數
leadingzero
:前導零。"0001"的前三個零就是前導零.
grouping
:幾個數作為一組。比如"54,678"是三個為一組隔開;"45,67896"是五個為一組...
lpdecimalsep
:指向乙個null結束的字串,表示小數和整數部分以什麼符號串隔開。
lpthousandsep
:指向乙個null結束的字串,表示組與組之間以為什麼字串分開。比如上面是逗號。
negativeorde
r:負數的模式。有四種,一般設定為1。
舉個例子:
char sznum[ ] = "785686754";
char szbuf[100];
numberfmt nf;
nf.numdigits = 2;
nf.leadingzero = false;
nf.grouping = 4;
nf.lpthousandsep = ".";
nf.negativeorder = 1;
getnumberformat(locale_user_default,
0,sznum,
&nf,
szbuf,
100);
結果szbuf =="7,8568,6754.00"
更詳細的說明請參見msdn,太晚了,明天要上班,睡了先。
格式化,強調 數值格式化
聚合函式返回的的數值型別的值有個特點就是沒有被格式化。通過前面的帶 sum 聚合函式的示例,我們可以看到這一點 注意合計值 命令,或者在物件檢視器中選中 displayformat 屬性。在上節的示例中,格式化操作是針對一物件或物件內的表示式,在物件內僅有乙個表示式時它還能正常工作,不過當物件內不有...
C ToString 格式化數值
格式字串採用以下形式 axx,其中 a 為格式說明符,指定格式化型別,xx 為精度說明符,控制格式化輸出的有效位數或小數字數。格式說明符 說明 示例 輸出 c 貨幣 2.5.tostring c 2.50 d 十進位制數 25.tostring d5 00025 e 科學型 25000.tostri...
ToString 格式化數值
格式化數值 有時,我們可能需要將數值以一定的格式來呈現,就需要對數值進行格式化。我們使用格式字串指定格式。格式字串採用以下形式 axx,其中 a 為格式說明符,指定格式化型別,xx 為精度說明符,控制格式化輸出的有效位數或小數字數。格式說明符 說明示例輸出c 貨幣2.5.tostring c2 2....