【发布时间】:2013-03-04 14:22:06
【问题描述】:
此代码: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
【问题讨论】:
-
它显示它是因为您要求它。如果您不想要它,只需使用另一个格式说明符。像“N2”。
-
您将格式与数据混淆了。如果您以错误的汇率或货币计费,这不是格式问题。
-
虽然根据stackoverflow的规则这是“非建设性”问题之一,但这是一个非常有趣的问题。
标签: .net localization currency