如何使用CultureInfo格式化已弃用的货币?

rea*_*art 5 c# format currency cultureinfo

在dotnet中,以文化特定方式格式化货币的推荐方法是(据我所知):

using System.Globalization
var info = CultureInfo.GetCultureInfo("en-GB")
return string.Format(info, "{0:c}", 1234.5678)
Run Code Online (Sandbox Code Playgroud)

返回:

 £1,234.57
Run Code Online (Sandbox Code Playgroud)

然而.此处未给出具体货币.因此,如果英国转换为欧元,同样的方法会突然返回如下:

 € 1,234.57
Run Code Online (Sandbox Code Playgroud)

这恰好发生在拉脱维亚.今年,它转换为欧元.各种系统包含letvia lats和euros两种金额.我需要能够打印和格式化旧货币.我需要确保新货币也可以处理.此格式不仅与符号有关,还与放置(前后,有或没有空格)和本地数字格式(小数分隔符和千位分隔符)有关.

我们数据库中的每个金额都有货币(例如EUR)和相应的文化(例如nl-NL).欧元金额的格式不同,具体取决于它们来自我们的德国或荷兰办事处.(他们都使用欧元,但格式不同)

  • dotnet是否提供对旧货币的访问?
  • 什么是编写格式量的未来证明方式?

现在,我能想到的唯一方法是将culture-database复制到我的数据库.

Ric*_*ard 1

您可以创建一个使用不同货币符号/格式的自定义CultureInfo(通过克隆并修改)(即将其设置NumberFormat为 的不同实例NumberFormatInfo)。

然后CultureInfo根据需要将其传递给格式化函数。

正如问题的评论所指出的,.NET(以及一般的 Windows)不提供历史数据(时区也类似,但有一个)。在您需要的情况下,您需要自己保存足够的数据。

请记住,在此类更改下, ISO-4217货币代码不会重复使用,因此根据金额保留该代码可以让您正确设置格式。此外,仅仅因为一个国家以一种方式格式化其货币金额并不意味着每个国家都这样做。例如。25 法郎在英国为“FF25.00”,但在其他地区为“25FF00”或“FF25,00”。(编辑:我注意到您涵盖了问题中的最后一段。)