我们有一个以基础货币存储数字(货币)的数据库,因此£21.30将作为2130存储在数据库中。我将如何将这个数字转换为适合所有文化的格式正确的货币?将整数转换为货币
2130 - >£21.30
2130 - > $ 21.30
等
我们有一个以基础货币存储数字(货币)的数据库,因此£21.30将作为2130存储在数据库中。我将如何将这个数字转换为适合所有文化的格式正确的货币?将整数转换为货币
2130 - >£21.30
2130 - > $ 21.30
等
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();
并非所有的文化都在数字后面有2个小数位...... – 2012-01-18 16:43:15
@LeeTreveil,因为并非所有的文化都在数字后有2位小数,你怎么知道从数据库中看到的值在哪里小数点是假设?你是说2130可能是21.30,也可能是2.130或213.0或2130.00? – Nope 2012-01-18 16:51:08
@LeeTreveil,在这种情况下,您将不得不在数据库中存储额外的列,指示将原始值转换为整数时使用的是哪种文化,以便知道需要分割多少。正如弗朗索瓦瓦尔指出,你不能知道这个给定一个整数,如2130. – 2012-01-18 16:54:37
decimal value = ((decimal)(myNumber/100.0));
var result = String.Format("{0:c}", value);
这里是如何用的String.Format做它在C#中:
decimal amount = 2130/100M;
string output = string.Format("{0:c}", amount);
,让你当前区域性的格式。 More information on MSDN
尝试以下操作:
decimal amount = 2130/100m;
string output = value.ToString("C", CultureInfo.CurrentCulture);
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 $
哦样子。津巴布韦在我上次更新时有自己的美元。哪一个可以更快地发生,你从列表中删除它,还是更新框架?
你用C#或SQL格式化它吗? – Blorgbeard 2012-01-18 16:40:05
21.30英镑与21.30美元不一样,至少不是今天的兑换率......你是否在储存特定货币的价值? – Pete 2012-01-18 16:40:57
c#最好带有string.format – 2012-01-18 16:41:06