Pergunta

Eu estou usando String.Format("{0:C2}", -1234) para formatar números.

É sempre formata o valor para um número positivo, enquanto eu quero que se torne $ - 1234

Foi útil?

Solução 3

Acho que vou simplesmente usar:

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

(no módulo Microsoft.VisualBasic.Strings)

Ou, em palavras mais curtas (isto é o que im indo realmente para uso):

FormatCurrency(-1234.56, 2, 0, 0)

Ou serei uma função FormatCurrency personalizado que usa a função VB passando meus parâmetros personalizados.

Para mais detalhes dê uma olhada na função FormatCurrency ( Basic) visual no MSDN.

Outras dicas

Am I certo em dizer que é colocá-lo entre colchetes, ou seja, ele é formatá-lo como ($1,234.00)? Se assim for, eu acredito que é o comportamento esperado para os EUA.

No entanto, você pode criar seu próprio NumberFormatInfo que não se comporta dessa maneira. Tome um NumberFormatInfo existente que é "quase certo", chamada Clone() para fazer uma cópia mutável, e defina a CurrencyNegativePattern de forma adequada (eu acho que você quer valor 2).

Por exemplo:

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);
    }
}

Este imprime $ -1,234.00. Se você realmente quer exatamente US $ -1234, você precisa definir o CurrencyGroupSizes propriedade para new int[]{0} e uso "{0:C0}" vez de "{0:C2}" como a cadeia de formato.

EDIT: Aqui está um método auxiliar que você pode usar que faz basicamente a mesma coisa:

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);
}

Outra opção simples é especificar manualmente a string de formato.

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

Ou, se as necessidades do símbolo de moeda para ser um parâmetro, você poderia fazer isso

String.Format("{0:" + symbol + "#,##0.00}", -1234)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top