String.Format (& # 8220; {0: C2} & # 8221 ;, -1234) (Formato valuta) considera i numeri negativi come positivi
-
05-07-2019 - |
Domanda
Sto usando String.Format (" {0: C2} " ;, -1234)
per formattare i numeri.
Formatta sempre l'importo in un numero positivo, mentre voglio che diventi $ - 1234
Soluzione 3
Penso che userò semplicemente:
FormatCurrency(-1234.56, 2, UseParensForNegativeNumbers:=TriState.False)
(nel modulo Microsoft.VisualBasic.Strings)
O in parole più brevi (questo è quello che sto per usare):
FormatCurrency(-1234.56, 2, 0, 0)
O mi renderò una funzione di formattazione personalizzata che utilizza la funzione VB passando i miei parametri personalizzati.
Per ulteriori dettagli, consulta la FormatCurrency Function ( Visual Basic) in msdn.
Altri suggerimenti
Ho ragione nel dire che lo sta mettendo tra parentesi, cioè lo sta formattando come ($ 1.234,00)
? In tal caso, credo che sia il comportamento previsto per gli Stati Uniti.
Tuttavia, puoi creare il tuo NumberFormatInfo
che non si comporta in questo modo. Prendi un NumberFormatInfo
esistente che è " per lo più corretto " ;, chiama Clone ()
per fare una copia mutabile, quindi imposta CurrencyNegativePattern
in modo appropriato (penso che tu voglia il valore 2).
Ad esempio:
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);
}
}
Questo stampa $ -1.234,00. Se in realtà vuoi esattamente $ -1234, dovrai impostare CurrencyGroupSizes
su new int [] {0}
e usa invece " {0: C0} "
di " {0: C2} "
come stringa di formato.
EDIT: ecco un metodo di supporto che puoi usare che sostanzialmente fa la stessa cosa:
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);
}
Un'altra semplice opzione è specificare manualmente la stringa di formato.
String.Format("{0:$#,##0.00}", -1234)
Oppure, se il simbolo di valuta deve essere un parametro, è possibile farlo
String.Format("{0:" + symbol + "#,##0.00}", -1234)