2012-01-18 94 views
4

我們有一個以基礎貨幣存儲數字(貨幣)的數據庫,因此£21.30將作爲2130存儲在數據庫中。我將如何將這個數字轉換爲適合所有文化的格式正確的貨幣?將整數轉換爲貨幣

2130 - >£21.30
2130 - > $ 21.30

+1

你用C#或SQL格式化它嗎? – Blorgbeard 2012-01-18 16:40:05

+1

21.30英鎊與21.30美元不一樣,至少不是今天的兌換率......你是否在儲存特定貨幣的價值? – Pete 2012-01-18 16:40:57

+1

c#最好帶有string.format – 2012-01-18 16:41:06

回答

11
int valueFromDb = 2130; 
decimal result = valueFromDb/100m; 
string formatted = result.ToString("c"); 

可以迅速擴展methodified:

public static class CurrencyExtensions 
{ 
    public static string AsCurrency(this int value) 
    { 
     return value.AsCurrency(CultureInfo.CurrentCulture); 
    } 

    public static string AsCurrency(this int value, CultureInfo culture) 
    { 
     decimal result = value/100m; 
     return result.ToString("c", culture); 
    } 
} 

,現在您可以DRYier:

int valueFromDb = 2130; 
string formatted = valueFromDb.AsCurrency(); 
+0

並非所有的文化都在數字後面有2個小數位...... – 2012-01-18 16:43:15

+1

@LeeTreveil,因爲並非所有的文化都在數字後有2位小數,你怎麼知道從數據庫中看到的值在哪裏小數點是假設?你是說2130可能是21.30,也可能是2.130或213.0或2130.00? – Nope 2012-01-18 16:51:08

+0

@LeeTreveil,在這種情況下,您將不得不在數據庫中存儲額外的列,指示將原始值轉換爲整數時使用的是哪種文化,以便知道需要分割多少。正如弗朗索瓦瓦爾指出,你不能知道這個給定一個整數,如2130. – 2012-01-18 16:54:37

0
decimal value = ((decimal)(myNumber/100.0)); 
var result = String.Format("{0:c}", value); 
2

這裏是如何用的String.Format做它在C#中:

decimal amount = 2130/100M; 
string output = string.Format("{0:c}", amount); 

,讓你當前區域性的格式。 More information on MSDN

0

嘗試以下操作:

decimal amount = 2130/100m; 
string output = value.ToString("C", CultureInfo.CurrentCulture); 
5
string asLocalCurrency(int intMoney) 
{ 
    return (num/100m).ToString("c"); //e.g. 12345 becomes €123.45 for me 
} 
string asSomeLocalCurrency(int intMoney, CultureInfo cInfo) 
{ 
    return (num/100m).ToString("c", cInfo); // e.g. 12345 with InvariantCulture is ¤123.45 
} 

不過。這意味着123.45英鎊成爲123.45美元或123.45歐元,這顯然是不正確的。

然後存在的問題是比索/美元符號$可以用來代表NIO,AUD,CAD,TOP,USD,HKD等等。它不是唯一可以在多個地方使用的符號。如果您正在記錄舊付款,即使是用於IEP和ITL(不再使用)的英鎊等物品也會成爲問題。

因此,您可以將這些值存儲爲主單位百分比的整數,但不適用於所有貨幣。

貨幣值只對隱含或顯式貨幣有意義。在這裏,你要麼選擇一個沒有,要麼用一個顯式替換一個隱含的,或者你依賴於一大塊重要的邏輯來保持正確。

最後這些可以工作,但是充滿了。其他兩個都是錯的。

最後,文化充其量告訴你人們最熟悉的貨幣,但不是他們總是使用的貨幣。我經常使用克朗和øre,但在使用它們時,我會使用Hiberno-English。

我建議存儲ISO 4217代碼以及貨幣。將它放在最終發票的某個地方也是一個好主意。這個符號對於漂亮是有好處的,代碼對於確保事情是很好的。

忽略用戶的文化,除了可能是默認選擇的最佳猜測。 (例如,如果他們是美國人,那麼他們可能想要使用美元,但可能不想)。有沒有那麼多的貨幣在世界上,所以這裏的所有欄的列表幾個專門的國際使用情況:

AED United Arab Emirates Dirham د.إ 
AFN Afghan Afghani ؋ 
ALL Albanian Lek L 
AMD Armenian Dram դր 
ANG Netherlands Antillean Guilder ƒ 
AOA Angolan Kwanza Kz 
ARS Argentine Peso $ 
AUD Australian Dollar $ 
AWG Aruban Florin ƒ 
AZN Azerbaijani Manat man. 
BAM Bosnia and Herzegovina Convertible Mark KM 
BBD Barbados Dollar $ 
BDT Bangladeshi Taka ৳ 
BGN Bulgarian Lev лв 
BHD Bahraini Dinar .د.ب 
BIF Burundian Franc FBu 
BMD Bermudian Dollar $ 
BND Brunei Dollar $ 
BOB Boliviano Bs. 
BRL Brazilian Real R$ 
BSD Bahamian Dollar $ 
BTN Bhutanese Ngultrum Nu. 
BWP Botswana Pula P 
BYR Belarusian Ruble Br 
BZD Belize Dollar $ 
CAD Canadian Dollar $ 
CDF Congolese Franc FC 
CHF Swiss Franc Fr. 
CLP Chilean Peso $ 
CNY Chinese Yuan ¥ 
COP Colombian Peso $ 
CRC Costa Rican Colon ₡ 
CUC Cuban convertible Peso $ 
CUP Cuban Peso $ 
CVE Cape Verde Escudo $ 
CZK Czech Koruna Kč 
DJF Djiboutian Franc Fdj 
DKK Danish Krone kr 
DOP Dominican Peso $ 
DZD Algerian Dinar د.ج 
EEK Estonian Kroon kr 
EGP Egyptian Pound ج.م 
ERN Eritrean Nakfa Nfk 
ETB Ethiopian Birr Br 
EUR Euro € 
FJD Fiji Dollar $ 
FKP Falkland Islands Pound £ 
GBP Pound Sterling (British Pound) £ 
GEL Georgian Lari lari 
GHS Ghanaian Cedi ₵ 
GIP Gibraltar Pound £ 
GMD Gambian Dalasi D 
GNF Guinean Franc FG 
GTQ Guatemalan Quetzal Q 
GYD Guyanese Dollar $ 
HKD Hong Kong Dollar $ 
HNL Honduran Lempira L 
HRK Croatian Kuna kn 
HTG Haitian Gourde G 
HUF Hungarian Forint Ft 
IDR Indonesian Rupiah Rp 
ILS Israeli New Sheqel ₪ 
INR Indian Rupee Rs 
IQD Iraqi Dinar د.ع 
IRR Iranian Rial ﷼ 
ISK Icelandic Króna kr 
JMD Jamaican Dollar $ 
JOD Jordanian Dinar JD 
JPY Japanese Yen ¥ 
KES Kenyan Shilling Ksh 
KGS Kyrgyzstani Som som 
KHR Cambodian Riel ៛ 
KMF Comoro Franc CF 
KPW North Korean Won ₩ 
KRW South Korean Won ₩ 
KWD Kuwaiti Dinar د.ك 
KYD Cayman Islands Dollar $ 
KZT Kazakhstani Tenge ₸ 
LAK Lao Kip ₭ 
LBP Lebanese Pound ل.ل 
LKR Sri Lanka Rupee Rs 
LRD Liberian Dollar $ 
LSL Lesotho Loti M 
LTL Lithuanian Litas Lt 
LVL Latvian Lats Ls 
LYD Libyan Dinar ل.د 
MAD Moroccan Dirham د.م. 
MDL Moldovan Leu leu 
MGA Malagasy Ariary ariary 
MKD Macedonian Denar ден 
MMK Myanma Kyat K 
MNT Mongolian Tögrög (Tugrik) ₮ 
MOP Macanese Pataca 毫 
MRO Mauritanian Ouguiya UM 
MUR Mauritian Rupee R 
MVR Maldivian Rufiyaa .ރ 
MWK Malawian Kwacha MK 
MXN Mexican Peso $ 
MYR Malaysian Ringgit RM 
MZN Mozambican Metical MTn 
NAD Namibian Dollar $ 
NGN Nigerian Naira ₦ 
NIO Nicaraguan Cordoba Oro C$ 
NOK Norwegian Krone kr 
NPR Nepalese Rupee रू. 
NZD New Zealand Dollar $ 
OMR Omani Rial ر.ع. 
PAB Panamanian Balboa ฿ 
PEN Peruvian Nuevo Sol S/. 
PGK Papua New Guinean Kina K 
PHP Philippine Peso ₱ 
PKR Pakistani Rupee Rs 
PLN Polish Zloty zł 
PYG Paraguayan Guaraní ₲ 
QAR Qatari Rial ر.ق 
RON Romanian New Leu lei 
RSD Serbian Dinar РСД 
RUB Russian Rouble руб 
RWF Rwandan Franc RF 
SAR Saudi Riyal ر.س 
SBD Solomon Islands Dollar $ 
SCR Seychelles Rupee SRe 
SDG Sudanese Pound SDG 
SEK Swedish Krona kr 
SGD Singapore Dollar $ 
SHP Saint Helena Pound £ 
SLL Sierra Leonean Leone Le 
SOS Somali Shilling So. Sh. 
SRD Surinamese Dollar $ 
STD São Tomé and Príncipe Dobra Db 
SYP Syrian Pound SYP 
SZL Lilangeni E 
THB Thai Baht ฿ 
TJS Tajikistani Somoni TJS 
TMT Turkmenistani Manat m 
TND Tunisian Dinar د.ت 
TOP Tongan Paʻanga T$ 
TRY Turkish Lira TL 
TTD Trinidad and Tobago Dollar $ 
TWD New Taiwan Dollar $ 
TZS Tanzanian Shilling TZS 
UAH Ukrainian Hryvnia ₴ 
UGX Ugandan Shilling Ush 
USD United States Dollar $ 
UYU Uruguayan Peso $ 
UZS Uzbekistan Som som 
VEF Venezuelan Bolívar Fuerte Bs. F 
VND Vietnamese Ðồng ₫ 
VUV Vanuatu Vatu Vt 
WST Samoan Tala WS$ 
XAF CFA Franc BEAC FCFA 
XCD East Caribbean Dollar $ 
XOF CFA Franc BCEAO CFA 
XPF CFP Franc F 
YER Yemeni Rial rial 
ZAR South African Rand R 
ZMK Zambian Kwacha ZK 
ZWL Zimbabwe Dollar $ 

哦樣子。津巴布韋在我上次更新時有自己的美元。哪一個可以更快地發生,你從列表中刪除它,還是更新框架?