String.Format ( “{0: C2}”, -1234) (formato de moeda) trata números negativos como positivos
-
05-07-2019 - |
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
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)