Come per la conversione tra “#, ## 0” e “{0: n2}” rappresentazioni di stringa formato stile?

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

Domanda

.NET supporta due tipi di formattazione di stringhe.

Sono in una situazione in cui i dati di configurazione esistente ha formattazione dello stile #,##0. Una nuova caratteristica deve essere formattata alla stessa uscita, ma l'API necessaria per questa funzione accetta solo formattazione di tipo {0:n2}.

Qualcuno sa di un mezzo per la conversione tra questi due rappresentazioni per i tipi numerici? DateTime può essere ignorato.

Modifica Ho imparato che:

È stato utile?

Soluzione

No, non puoi.

Dal tuo link per gli articoli MSDN su formato standard stringhe , troverete:

  

L'attuale numero modello negativo,   numero di partecipanti, separatore delle migliaia,   e separatore decimale sono specificati dal   l'oggetto NumberFormatInfo corrente.

Così i progettisti di formattazione standard variano a seconda che la cultura il programma è in esecuzione.

Dal momento che la formattazione personalizzata specifica esattamente come il numero sta a guardare, qualunque sia la cultura il programma è in esecuzione. La sua gonna allways lo stesso aspetto.

La cultura il programma è in esecuzione non è nota durante la fase di compilazione, si tratta di una proprietà di esecuzione.

Quindi la risposta è:. No, non è possibile mappare automaticamente, perché non c'è una mappatura coerente one-to-one

Altri suggerimenti

HACK ALERT !!!

Arjan ha sottolineato nella sua risposta eccellente quello che voglio fare non è possibile in un modo a prova di proiettile in tutti i locali (Grazie Arjan).

Per i miei scopi, so che sto solo che fare con i numeri e la cosa più importante che mi riguarda con sta avendo lo stesso numero di cifre decimali. Quindi, ecco il mio mod.

private static string ConvertCustomToStandardFormat(string customFormatString)
{
    if (customFormatString == null || customFormatString.Trim().Length == 0)
        return null;

    // Percentages do not need decimal places
    if (customFormatString.EndsWith("%"))
        return "{0:P0}";

    int decimalPlaces = 0;

    int dpIndex = customFormatString.LastIndexOf('.');
    if (dpIndex != -1)
    {
        for (int i = dpIndex; i < customFormatString.Length; i++)
        {
            if (customFormatString[i] == '#' || customFormatString[i] == '0')
                decimalPlaces++;
        }
    }

    // Use system formatting for numbers, but stipulate the number of decimal places
    return "{0:n" + decimalPlaces + "}";
}

Questa utilizzata per formattare il numero in 2 posizioni decimali

string s = string.Format("{0:N2}%", x);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top