此代码:Console.Out.WriteLine(string.Format(CultureInfo.GetCultureInfo("hu-HU"), "{0:C}", 1234.56M))
将产生以下输出:1 234,56 Ft,这在技术上是正确的,但它是如何猜测货币的呢?
这种行为意味着,只需将显示区域性从 hu-HU 更改为 en-US,该值将乘以 200 以上,具体取决于当前速率。你永远不会犯 500 福林兑换 500 美元的错误。明显的。
设置货币的唯一“好”方法是克隆所需的文化并设置货币符号:
var format = NumberFormatInfo.GetInstance(CultureInfo.GetCultureInfo("en-US")).Clone() as NumberFormatInfo;
format.CurrencySymbol = "asd";
Console.Out.WriteLine(string.Format(format, "{0:C}", 1234.56M));
这可以正常生产asd1,234.56
,但非常麻烦。
我的问题是:
- 在我们生活了几十年的这个全球化世界中,违约国家货币的比例是多少?
- 为什么没有办法以更相关的方式指定金额和货币,因为它们如此耦合?
- 奖励:如果我将 sk-SK 用于文化,我会得到欧元作为“默认”货币。如果我更改为 Framework 2.0,我应该得到
Sk
(对于斯洛伐克克朗),因为在 2005 年它是本国货币。(嗯,它不会发生。但我没有在任何不迟于 2.0 的系统上尝试过。)
更新:结论:
- 文化中的违约货币对某些人来说是正常的,对其他人来说很奇怪(包括我)
- 没有“金额”类型,因为没有长度、重量等类型,限制在哪里?Virtlink 为此创建了一个库:M42 Financial