这应该很简单,但我无法在任何地方找到答案。在我们的 asp.net MVC 网站上,我们显示货币值,我需要这些货币值始终以美元为单位,无论用户的文化设置如何。
如果我使用 string.format("{0:C}",value) 那么它会显示使用设置的任何文化中的值。这对我们来说是不正确的,因为 1000.00 美元与 1000.00 欧元不同
我仍然需要使用语言方面,这意味着如果他们在法国我想使用法语本地化资源,所以我不想完全无视他们的文化设置,但我怎样才能确保始终显示货币美元?
这应该很简单,但我无法在任何地方找到答案。在我们的 asp.net MVC 网站上,我们显示货币值,我需要这些货币值始终以美元为单位,无论用户的文化设置如何。
如果我使用 string.format("{0:C}",value) 那么它会显示使用设置的任何文化中的值。这对我们来说是不正确的,因为 1000.00 美元与 1000.00 欧元不同
我仍然需要使用语言方面,这意味着如果他们在法国我想使用法语本地化资源,所以我不想完全无视他们的文化设置,但我怎样才能确保始终显示货币美元?
将区域性显式传递给 Format 调用:
string.Format(new CultureInfo("en-US"), "{0:C}",value)
如果您必须将其与其他语言混合 - 保存格式化货币值的结果并作为字符串插入其他地方。
旁注:使用“en-US”(或任何其他硬编码的文化)将导致负值的潜在不匹配表示,即某些文化使用 -100,而其他 (100) 用于负数。
您必须将 CurrentCulture 指定为 en-US 并保持 CurrentUICulture 不变。
我通常在 Application_BeginRequest 事件中的 global.asax.cs 中执行此操作
System.Threading.Thread.CurrentThread.CurrentCulture =
new System.Globalization.CultureInfo("en-US", false);
可以在 web.config 文件中指定文化,但这有一个缺点 - 它考虑了服务器的自定义区域设置(如果管理员在服务器上更改了 en-US 文化的货币或日期格式,它会以这种方式被拾取)-因此您永远无法确定应用程序的行为与您创建/测试它时的行为完全相同。