为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 C# decimal ToString 不请求文化和货币?

为什么 C# decimal ToString 不请求文化和货币?

C#
芜湖不芜 2022-06-12 11:23:21
在给定数字和货币的情况下,我找不到将它们打印到给定文化的字符串的选项。我发现的最接近的东西是decimal.ToString("C", GIVEN_CULTURE),但这不会要求货币,并且会假设我在谈论文化所知道的货币。如果我在欧洲使用美元怎么办?例如,Javascript 在构建字符串时会请求这两个参数:GIVEN_STRING.toLocaleString(culture, { style: 'currency', currency: currency })这是相关的,因为我正在开发的软件同时处理美元和 MXN(墨西哥比索)。我们的网络仪表板显示了关于文化的不同符号(Chrome 示例,我认为跨浏览器会有所不同):在:美元有符号“$”MXN 有符号“MX$”es-MX:美元有符号“US$”MXN 有符号“$”
查看完整描述

2 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

如果您只担心货币符号,您可以轻松地将其设置为您喜欢的任何内容:


var format = (NumberFormatInfo)CultureInfo.CreateSpecificCulture("es-MX").NumberFormat.Clone();

format.CurrencySymbol = "US$";

decimal amount = 12.34m;

amount.ToString("C", format);

// OUTPUT:

// US$12.34

但通常还有更多的格式化货币值。如您所见,例如,由于特定的文化差异(如小数点、货币符号位置、间距等),该值在德国的格式会非常不同:


amount.ToString("C", CultureInfo.CreateSpecificCulture("de-DE"));

// OUTPUT:

// 12,34 €


查看完整回答
反对 回复 2022-06-12
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

我不确定我是否理解您的问题,但例如,如果您希望将 adouble表示为不同国家/地区的货币,那么您需要为其提供不同的货币CultureInfo。


double foo = 3;

string fooGerman = foo.ToString("C", CultureInfo.GetCultureInfo("de-DE"));

string fooEnglish = foo.ToString("C", CultureInfo.GetCultureInfo("en-GB"));

Console.WriteLine(fooGerman);

Console.WriteLine(fooEnglish);


OUTPUT

3,00 €

£3.00

如果这还不够,您可以为给定CultureInfo的 in设置符号CultureInfo.NumberFormat.CurrencySymbol,您可以为 the 创建自己IFormatProvider的ToString()或创建自己的CultureInfo.


查看完整回答
反对 回复 2022-06-12
  • 2 回答
  • 0 关注
  • 134 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信