在 dotnet 中,以特定于文化的方式格式化货币的推荐方法是(据我所知):
using System.Globalization
var info = CultureInfo.GetCultureInfo("en-GB")
return string.Format(info, "{0:c}", 1234.5678)
这将返回:
£1,234.57
然而。这里没有给出具体的货币。因此,如果英国转换为欧元,同样的方法会突然返回类似以下内容:
€ 1,234.57
这刚刚发生在拉脱维亚。今年,它转换为欧元。各种系统都包含以拉特和欧元为单位的金额。我需要能够打印和格式化旧货币。我需要确保也可以处理新货币。这种格式不仅与符号有关,还与放置(之前、之后、有或没有空格)和本地数字格式(小数分隔符和千位分隔符)有关。
我们数据库中的每个金额都有一种货币(例如欧元)和相应的文化(例如nl-NL)。欧元金额的格式有所不同,具体取决于它们来自我们的德国还是荷兰办事处。 (他们都使用欧元,但金额格式不同)
- dotnet 是否提供对旧货币的访问?
- 编写格式化金额的面向未来的方法是什么?
现在,我能想到的唯一方法是将文化数据库复制到我的数据库中。
您可以创建一个自定义CultureInfo http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo%28v=vs.110%29.aspx (by cloning http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.clone%28v=vs.110%29.aspx一个和修改)使用不同的货币符号/格式(即设置其NumberFormat http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.numberformat%28v=vs.110%29.aspx到另一个实例NumberFormatInfo http://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo%28v=vs.110%29.aspx).
然后通过这个CultureInfo
根据需要格式化函数。
正如问题的评论所指出的,.NET(以及一般的 Windows)不提供历史数据(时区也类似,但有一个图书馆 https://code.google.com/p/noda-time/)。在您需要的情况下,您需要自己保存足够的数据。
记住ISO-4217 http://en.wikipedia.org/wiki/ISO_4217在此类更改下,货币代码不会重复使用,因此根据金额保留货币代码可以让您正确设置格式。此外,仅仅因为一个国家以一种方式格式化其货币金额并不意味着每个国家都这样做。例如。 25 法郎在英国为“FF25.00”,但在其他地区为“25FF00”或“FF25,00”。 (编辑:我注意到您涵盖了问题中的最后一段。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)