Formato de cadena (“{0: C2}”, -1234) (Formato de moneda) trata los números negativos como positivos
-
05-07-2019 - |
Pregunta
Estoy usando String.Format (" {0: C2} " ;, -1234)
para formatear números.
Siempre da formato a la cantidad a un número positivo, mientras que quiero que se convierta en $ - 1234
Solución 3
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 haré una función de formato de moneda personalizada que usa la función VB pasando mis parámetros personalizados.
Para más detalles, eche un vistazo a la Función FormatCurrency ( Visual Basic) en el msdn.
Otros consejos
¿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 comporta de esta manera. Tome un NumberFormatInfo
existente que es " mayormente correcto " ;, llame a Clone ()
para hacer una copia mutable, y luego configure CurrencyNegativePattern
apropiadamente (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á configurar CurrencyGroupSizes
a new int [] {0}
y usa " {0: C0} "
en su lugar de " {0: C2} "
como la cadena de formato.
EDITAR: Aquí hay un método auxiliar que puedes 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);
}
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)