Moneda de formato de cadena

Tengo esta linea

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

en mi vista de afeitar. Quiero que muestre un signo de dólar frente al precio, pero en su lugar muestra un signo de libra. ¿Cómo logro esto?

Sospecho fuertemente que el problema es simplemente que la cultura actual del hilo que maneja la solicitud no está configurada apropiadamente.

Puede establecerlo para toda la solicitud o especificar la cultura durante el formateo. De cualquier manera, sugeriría que no use string.Format con un formato compuesto a menos que realmente tenga más de una cosa para formatear (o un mensaje más amplio). En cambio, usaría:

 @price.ToString("C", culture) 

Simplemente lo hace algo más simple.

EDITAR: Dado su comentario, parece que es posible que desee utilizar una cultura del Reino Unido, independientemente de la cultura del usuario. Así que de nuevo, establezca la cultura del Reino Unido como la cultura del hilo para toda la solicitud, o posiblemente introduzca su propia clase de ayuda con una “constante”:

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

Entonces:

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

En mi experiencia, tener un conjunto de culturas “nombrado” como este hace que el código que lo usa sea considerablemente más simple de leer, y no es necesario obtener la cadena correcta en varios lugares.

Como han dicho otros, puede lograr esto a través de un Proveedor de IFormat. Pero tenga en cuenta que el formato de moneda va mucho más allá del símbolo de moneda. Por ejemplo, un precio correctamente formateado en los EE. UU. Puede ser “$ 12.50”, pero en Francia se escribiría “12,50 $” (el punto decimal es diferente al igual que la posición del símbolo de moneda). No desea perder este formato apropiado para su cultura solo por cambiar el símbolo de moneda. Y la buena noticia es que no es necesario, ya que este código demuestra:

 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". 

Debe proporcionar un Proveedor IFormat:

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

Personalmente, estoy en contra de usar un código específico de cultura, sugiero hacer:

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

y en tu web.config do:

    

Información adicional: https://msdn.microsoft.com/en-us/library/syy068tk(v=vs.90).aspx

Para la maquinilla de afeitar puede usar: cultura, valor

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

Pantalla de la consola de salida:

Use esto, funciona y es muy simple:

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