无论用户文化如何,格式化货币始终使用美元

时间:2012-11-05 16:26:17

标签: c# asp.net-mvc localization

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

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

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

2 个答案:

答案 0 :(得分:8)

将文化显式传递给Format调用:

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

如果必须将其与其他语言混合使用 - 保存格式化货币值的结果并以字符串形式插入其他位置。

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

答案 1 :(得分: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的货币或日期格式文化,它会以这种方式被拾取) - 所以你不能确定应用程序的行为与你创建/测试时的行为完全相同。