c# vb.net string-formatting currency string.format

c# - String.Format(“{0: C2}”,-1234)(Formato de moneda) trata los números negativos como positivos



vb.net string-formatting (3)

¿Estoy en lo cierto al decir que lo está poniendo entre paréntesis, es decir, lo está formateando como ($1,234.00) ? Si es así, creo que ese es el comportamiento previsto para los Estados Unidos.

Sin embargo, puede crear su propio NumberFormatInfo que no se comporte de esta manera. Tome un NumberFormatInfo existente que sea "mayormente correcto", llame a Clone() para hacer una copia mutable, y luego configure el CurrencyNegativePattern adecuadamente (creo que quiere valor 2).

Por ejemplo:

using System; using System.Globalization; class Test { static void Main() { var usCulture = CultureInfo.CreateSpecificCulture("en-US"); var clonedNumbers = (NumberFormatInfo) usCulture.NumberFormat.Clone(); clonedNumbers.CurrencyNegativePattern = 2; string formatted = string.Format(clonedNumbers, "{0:C2}", -1234); Console.WriteLine(formatted); } }

Esto imprime $ -1,234.00. Si realmente desea exactamente $ -1234, deberá establecer la propiedad CurrencyGroupSizes en new int[]{0} y usar "{0:C0}" lugar de "{0:C2}" como la cadena de formato.

EDITAR: Aquí hay un método auxiliar que puede usar que básicamente hace lo mismo:

private static readonly NumberFormatInfo CurrencyFormat = CreateCurrencyFormat(); private static NumberFormatInfo CreateCurrencyFormat() { var usCulture = CultureInfo.CreateSpecificCulture("en-US"); var clonedNumbers = (NumberFormatInfo) usCulture.NumberFormat.Clone(); clonedNumbers.CurrencyNegativePattern = 2; return clonedNumbers; } public static string FormatCurrency(decimal value) { return value.ToString("C2", CurrencyFormat); }

Estoy usando String.Format("{0:C2}", -1234) para dar formato a los números.

Siempre da formato a la cantidad a un número positivo, mientras que quiero que se convierta en $ - 1234


Creo que simplemente usaré:

FormatCurrency(-1234.56, 2, UseParensForNegativeNumbers:=TriState.False)

(en el módulo Microsoft.VisualBasic.Strings)

O en palabras más cortas (esto es lo que realmente voy a usar):

FormatCurrency(-1234.56, 2, 0, 0)

O me convertiré en una función de moneda de formato personalizada que use la función VB y pase mis parámetros personalizados.

Para más detalles, eche un vistazo a la función FormatCurrency (Visual Basic) en el msdn.


Otra opción simple es especificar manualmente la cadena de formato.

String.Format("{0:$#,##0.00}", -1234)

O, si el símbolo de moneda debe ser un parámetro, puede hacer esto

String.Format("{0:" + symbol + "#,##0.00}", -1234)