Hvordan konvertere mellom "#, ## 0" og "{0: N2}" stil format streng representasjoner?

stemmer
0

NET støtter to typer av strengen formatering.

Jeg er i en situasjon der eksisterende konfigurasjonsdata har #,##0stil formatering. En ny funksjon krever formatering til samme utgang, men API nødvendig for at denne funksjonen kun godtar formatering av type {0:n2}.

Er det noen som vet om et middel til å konvertere mellom disse to representasjoner for numeriske typer? DateTimekan ignoreres.

EDIT Jeg har lært at:

Publisert på 20/02/2009 klokken 09:36
kilden bruker
På andre språk...                            


3 svar

stemmer
2

Nei, det kan du ikke.

Fra din link til MSDN artikler om standardformat trenger, finner du:

Selve negativt tall mønster, blir nummergruppe størrelse, tusen separator, og desimaltegn spesifisert av den aktuelle NumberFormatInfo objekt.

Så standard formateringsbransjen vil variere avhengig av hvilken kultur programmet kjører under.

Siden den tilpassede forma angir nøyaktig hvor antallet kommer til å se, uansett kultur programmet kjører under. Dens alltid skal se det samme.

Kulturen programmet kjører under er ikke kjent under kompilering, det er en kjøretids eiendom.

Så svaret er: Nei, du kan ikke tilordne automatisk, fordi det ikke er en en-til-en konsekvent kartlegging.

Svarte 20/02/2009 kl. 10:43
kilden bruker

stemmer
0

HACK ALERT !!!

Som Arjan påpekte i sin utmerkede svar på hva jeg ønsker å gjøre er ikke mulig i en skuddsikker måte på tvers av alle steder (Takk Arjan).

For mitt formål, jeg vet at jeg bare arbeider med tall og store ting jeg er opptatt av er å ha samme antall desimaler. Så her er min hack.

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 + "}";
}
Svarte 20/02/2009 kl. 11:28
kilden bruker

stemmer
0

Dette brukes for å formatere tall til 2 desimaler

string s = string.Format("{0:N2}%", x);
Svarte 07/03/2016 kl. 14:17
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more