6

这应该很简单,但我无法在任何地方找到答案。在我们的 asp.net MVC 网站上,我们显示货币值,我需要这些货币值始终以美元为单位,无论用户的文化设置如何。

如果我使用 string.format("{0:C}",value) 那么它会显示使用设置的任何文化中的值。这对我们来说是不正确的,因为 1000.00 美元与 1000.00 欧元不同

我仍然需要使用语言方面,这意味着如果他们在法国我想使用法语本地化资源,所以我不想完全无视他们的文化设置,但我怎样才能确保始终显示货币美元?

4

2 回答 2

8

将区域性显式传递给 Format 调用:

string.Format(new CultureInfo("en-US"), "{0:C}",value) 

如果您必须将其与其他语言混合 - 保存格式化货币值的结果并作为字符串插入其他地方。

旁注:使用“en-US”(或任何其他硬编码的文化)将导致负值的潜在不匹配表示,即某些文化使用 -100,而其他 (100) 用于负数。

于 2012-11-05T16:28:33.177 回答
1

您必须将 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 文化的货币或日期格式,它会以这种方式被拾取)-因此您永远无法确定应用程序的行为与您创建/测试它时的行为完全相同。

于 2012-11-05T16:31:15.010 回答