String.Format (& # 8220; {0: C2} & # 8221 ;, -1234) (Formato valuta) considera i numeri negativi come positivi

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

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

È stato utile?

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)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top