visual studio salida porcentaje net mvc moneda formato asp c# .net

c# - studio - Formato de moneda



formato porcentaje en c# (3)

Esto debería ser un problema fácil pero ...

Necesito formatear una moneda para mostrar (cadena) en C #

La moneda en cuestión tendrá sus propias reglas, como el símbolo a usar y si ese símbolo debe aparecer antes del valor (por ejemplo, $ 10) o después (por ejemplo, 10 ₫ que es Dong vietnamita).

Pero el formato de los números depende de los usuarios locales, no de la moneda.

P.ej

1.234,56 ₫ should be displayed to a user in Vietnam but 1,234.56 ₫ should be displayed to a user in the US

(Formato como código tan fácil de ver la diferencia entre, y.)

Así que código como

Double vietnamTotal = 1234.56; return vietnamTotal.ToString("c");

No funcionará, ya que usará la configuración regional de los usuarios (o, de manera más precisa, Cultura Info. Cultura Actual) para el formato y la moneda, por lo que obtendría cosas como $ 1,123.56: uso correcto de, y. pero el símbolo equivocado.

Double vietnamTotal = 1234.56; CultureInfo ci = new CultureInfo(1066); // Vietnam return vietnameTotal.ToString("c",ci));

Daría 1.234,56 ₫ - Símbolo correcto, uso incorrecto de, y. para el usuario actual.

Esta publicación ofrece más detalles sobre lo que se debe hacer, pero no sobre cómo hacerlo.

¿Qué método obvio oculto en el marco me estoy perdiendo?


Lo siento, puede que esté siendo un poco lento aquí, pero aún no veo su punto. Me parece que la pregunta original es "Tengo un valor dong que, en Vietnam, quiero que se muestre según el formato de moneda vietnamita, con el símbolo" ", y en EE. UU., Que se muestre según el formato de moneda de EE. UU. pero aún con un "₫". .

Supongo que me confunden las dos afirmaciones contradictorias ... "La moneda en cuestión tendrá sus propias reglas" y "la forma en que se formatean los números depende de los usuarios locales [sic], no de la moneda".

Si todo lo que quería cambiar era el símbolo de moneda y dejar el formato según la cultura actual, ¿no sería suficiente clonar el nfi y establecer el símbolo?

NumberFormatInfo nfi; // pretend we''re in Vietnam Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("vi-VN"); nfi = CultureInfo.CurrentCulture.NumberFormat.Clone() as NumberFormatInfo; nfi.CurrencySymbol = "₫"; String s1 = (1234.5678).ToString("c", nfi); // pretend we''re in America Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US"); nfi = CultureInfo.CurrentCulture.NumberFormat.Clone() as NumberFormatInfo; nfi.CurrencySymbol = "₫"; String s2 = (1234.5678).ToString("c", nfi);


Para trabajar con un cuadro de texto, intente lo siguiente:

textBox2.Text = "Rp" + (textBox1.Text = string.Format(System.Globalization.CultureInfo.GetCultureInfo("id-ID"), "{0:#,##0.00}", double.Parse(textBox1.Text)));


  • Tome NumberFormatInfo de la moneda del usuario y NumberFormatInfo
  • Configure el CurrencySymbol de CurrencySymbol en el formato clonado al CurrencySymbol de CurrencySymbol de la moneda en cuestión
  • Si desea copiar la posición de la moneda (y algunos otros aspectos del formato), configure CurrencyPositivePattern y CurrencyNegativePattern de la misma manera.
  • Usa el resultado para formatear.

Por ejemplo:

using System; using System.Globalization; class Test { static void Main() { decimal total = 1234.56m; CultureInfo vietnam = new CultureInfo(1066); CultureInfo usa = new CultureInfo("en-US"); NumberFormatInfo nfi = usa.NumberFormat; nfi = (NumberFormatInfo) nfi.Clone(); NumberFormatInfo vnfi = vietnam.NumberFormat; nfi.CurrencySymbol = vnfi.CurrencySymbol; nfi.CurrencyNegativePattern = vnfi.CurrencyNegativePattern; nfi.CurrencyPositivePattern = vnfi.CurrencyPositivePattern; Console.WriteLine(total.ToString("c", nfi)); } }

Es cierto que mi consola no logra mostrar el símbolo correcto, pero estoy seguro de que eso se debe a problemas de fuente :)