string格式货币

我有这条线

@String.Format("{0:C}", @price) 

在我的剃刀视图。 我希望它在价格前面显示一个美元符号,而是显示一个英镑符号。 我如何做到这一点?

我强烈怀疑这个问题仅仅是处理请求的线程的当前文化没有适当地设置。

您可以为整个请求设置它,也可以在格式化时指定文化。 无论哪种方式,我会build议不要使用string.Format与复合格式,除非你真的有不止一个东西格式化(或更广泛的消息)。 相反,我会使用:

 @price.ToString("C", culture) 

这只是使它更简单。

编辑:给你的评论,这听起来像你可能很想使用英国文化, 无论用户的文化。 所以,要么把英国文化设置为整个请求的线索文化,要么可能引入你自己的帮助者类别:“常量”:

 public static class Cultures { public static readonly CultureInfo UnitedKingdom = CultureInfo.GetCultureInfo("en-GB"); } 

然后:

 @price.ToString("C", Cultures.UnitedKingdom) 

根据我的经验,拥有这样一组“文化”的文化使得代码使用起来更容易阅读,而且您不需要在多个地方获取string。

正如其他人所说,你可以通过一个IFormatProvider来实现。 但请记住,货币格式远远超出货币符号。 例如,美国的正确格式的价格可能是“12.50美元”,但在法国,这将被写为“12,50美元”(小数点与货币符号的位置不同)。 为了更改货币符号,您不希望失去这种适应文化的格式。 好消息是,你不必像这段代码所表明的那样:

 var cultureInfo = Thread.CurrentThread.CurrentCulture; // You can also hardcode the culture, eg var cultureInfo = new CultureInfo("fr-FR"), but then you lose culture-specific formatting such as decimal point (. or ,) or the position of the currency symbol (before or after) var numberFormatInfo = (NumberFormatInfo)cultureInfo.NumberFormat.Clone(); numberFormatInfo.CurrencySymbol = "€"; // Replace with "$" or "£" or whatever you need var price = 12.3m; var formattedPrice = price.ToString("C", numberFormatInfo); // Output: "€ 12.30" if the CurrentCulture is "en-US", "12,30 €" if the CurrentCulture is "fr-FR". 

您需要提供一个IFormatProvider:

 @String.Format(new CultureInfo("en-US"), "{0:C}", @price) 

我个人反对使用文化特定的代码,我build议做:

 @String.Format(CultureInfo.CurrentCulture, "{0:C}", @price) 

并在你的web.config做:

 <system.web> <globalization culture="en-GB" uiCulture="en-US" /> </system.web> 

其他信息: https : //msdn.microsoft.com/en-us/library/syy068tk(v=vs.90).aspx

对于剃刀,你可以使用:文化,价值

 @String.Format(new CultureInfo("sv-SE"), @Model.value) 
 decimal value = 0.00M; value = Convert.ToDecimal(12345.12345); Console.WriteLine(".ToString(\"C\") Formates With Currency $ Sign"); Console.WriteLine(value.ToString("C")); //OutPut : $12345.12 Console.WriteLine(value.ToString("C1")); //OutPut : $12345.1 Console.WriteLine(value.ToString("C2")); //OutPut : $12345.12 Console.WriteLine(value.ToString("C3")); //OutPut : $12345.123 Console.WriteLine(value.ToString("C4")); //OutPut : $12345.1234 Console.WriteLine(value.ToString("C5")); //OutPut : $12345.12345 Console.WriteLine(value.ToString("C6")); //OutPut : $12345.123450 Console.WriteLine(); Console.WriteLine(".ToString(\"F\") Formates With out Currency Sign"); Console.WriteLine(value.ToString("F")); //OutPut : 12345.12 Console.WriteLine(value.ToString("F1")); //OutPut : 12345.1 Console.WriteLine(value.ToString("F2")); //OutPut : 12345.12 Console.WriteLine(value.ToString("F3")); //OutPut : 12345.123 Console.WriteLine(value.ToString("F4")); //OutPut : 12345.1234 Console.WriteLine(value.ToString("F5")); //OutPut : 12345.12345 Console.WriteLine(value.ToString("F6")); //OutPut : 12345.123450 Console.Read(); 

输出控制台屏幕: