A:你可以通過指定NumberStyles.Currency來告訴Parse或TryParse待解析的字符串是貨幣樣式的。NumberStyles.Currency說明待解析字符串可能包含前綴或後綴空格、前綴正負號、十進制小數點、千分位符號、字面數值可能為整數或小數等:
int result = Int32.Parse(" $1,412 ", NumberStyles.Currency);
但貨幣樣式字符串不能帶有任何十六進制符號。另外,貨幣樣式字符串格式的相關設定以Region and Languages Options(區域與語言選項)裡面的設定為基准。
Q:如果我更改系統的Region and Languages Options(區域與語言選項)裡面的設置,但又希望不按照裡面的設置來解析字符串呢?
A:這個時候就輪到NumberFormatInfo類出場了,這個類能夠讓你無需對系統的設置作任何修改而直接告訴相關的方法如何處理字符串裡的相關符號。
對應上圖,我們通過NumberFormatInfo的相關屬性來設定Customerize Regional Options(自定義區域選項)中Currency(貨幣)選項卡裡的相關設定:
NumberFormatInfo Currency(貨幣) CurrencySymbol Currency symbol(貨幣符號) CurrencyPositivePattern Positive currency format(貨幣正數格式) CurrencyNegativePattern Negative currency format(貨幣符號格式) CurrencyDecimalSeparator Decimal symbol(小數點) CurrencyDecimalDigits No. of digits after decimal(小數數位) CurrencyGroupSeparator Digit grouping symbol(數字分組符號)其中,Customerize Regional Options(自定義區域選項)中Currency(貨幣)選項卡裡的Digit grouping(數字分組)需要結合NumberFormatInfo的CurrencyGroupSeparator和CurrencyGroupSizes兩個屬性來設定。而NumberFormatInfo的CurrencyPositivePattern和CurrencyNegativePattern屬性的設值是有限制的:
CurrencyPositivePattern Value Associated Pattern 0 $n 1 n$ 2 $ n 3 n $ CurrencyNegativePattern Value Associated Pattern 0 ($n) 1 -$n 2 $-n 3 $n- 4 (n$) 5 -n$ 6 n-$ 7 n$- 8 -n $ 9 -$ n 10 n $- 11 $ n- 12 $ -n 13 n- $ 14 ($ n) 15 (n $)