字符串格式货币字符串格式货币(String format currency)

2019-05-13 19:10发布

我有这条线

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

在我的Razor视图。 我希望它显示在价格前面的美元符号,而是它显示英镑符号。 如何实现这一目标?

Answer 1:

我强烈怀疑问题很简单,就是线程处理请求的当前文化没有设置正确。

你可以将它设置为整个请求,或指定的文化,而格式化。 无论哪种方式,我建议使用string.Format具有复合格式,除非你真的有不止一件事格式化(或更广泛的信息)。 相反,我会使用:

@price.ToString("C", culture)

这只是使它要简单一些。

编辑:鉴于您的评论,这听起来像你可能想使用英国的文化,而不考虑用户的文化。 如此反复,要么设置英国文化作为整个请求的线程的文化,或者可能与“不变”介绍了自己的助手:

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

然后:

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

根据我的经验,有一个“命名”设置文化像这样使用它相当简单阅读使代码,而你并不需要得到正确的字符串在多个地方。



Answer 2:

正如其他人所说,你可以通过的IFormatProvider实现这一目标。 但是记住,货币格式远远超出了货币符号。 例如,在美国的一个格式正确的价格可能是“$ 12.50”,但在法国,这将被写入“$ 12.50”(小数点是不同的,因为是货币符号的位置)。 你不想失去这个培养适当的格式只是改变了货币符号的缘故。 而好消息是,你不必,因为这样的代码演示:

var cultureInfo = Thread.CurrentThread.CurrentCulture;   // You can also hardcode the culture, e.g. 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".


Answer 3:

您需要提供的IFormatProvider:

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


Answer 4:

我个人是反对使用特定的文化代码,我建议这样做:

@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



Answer 5:

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

@String.Format(new CultureInfo("sv-SE"), @Model.value)


Answer 6:

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();

输出控制台屏幕:



Answer 7:

使用此它的工作原理,并如此简单:

  var price=22.5m;
  Console.WriteLine(
     "the price: {0}",price.ToString("C", new System.Globalization.CultureInfo("en-US")));


Answer 8:

对于那些使用C#6.0字符串插补语法:如: $"The price is {price:C}" , 该文件中建议使用不同的几种方法CultureInfo

我已经适应了使用货币的例子:

decimal price = 12345.67M;
FormattableString message = $"The price is {price:C}";

System.Globalization.CultureInfo.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo("nl-NL");
string messageInCurrentCulture = message.ToString();

var specificCulture = System.Globalization.CultureInfo.GetCultureInfo("en-IN");
string messageInSpecificCulture = message.ToString(specificCulture);

string messageInInvariantCulture = FormattableString.Invariant(message);

Console.WriteLine($"{System.Globalization.CultureInfo.CurrentCulture,-10} {messageInCurrentCulture}");
Console.WriteLine($"{specificCulture,-10} {messageInSpecificCulture}");
Console.WriteLine($"{"Invariant",-10} {messageInInvariantCulture}");
// Expected output is:
// nl-NL      The price is € 12.345,67
// en-IN      The price is ₹ 12,345.67
// Invariant  The price is ¤12,345.67


文章来源: String format currency