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 yNumberFormatInfo
- Configure el
CurrencySymbol
deCurrencySymbol
en el formato clonado alCurrencySymbol
deCurrencySymbol
de la moneda en cuestión - Si desea copiar la posición de la moneda (y algunos otros aspectos del formato), configure
CurrencyPositivePattern
yCurrencyNegativePattern
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 :)