Formato de cadena (“{0: C2}”, -1234) (Formato de moneda) trata los números negativos como positivos

StackOverflow https://stackoverflow.com/questions/1001114

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

¿Fue útil?

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)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top