2016-05-25 14 views
1

Es gibt viele Format-Spezifizierer in .net, z. C für die Währung, D für die Dezimalzahl. Viele definierte Formate können here sein.Get Exact Format Zeichenfolge in Bezug auf bestimmte Format-Spezifizierer

Wie bekomme ich genaue Format hinter Formatbezeichner wie angegeben Gebietsschema.

z. (Ich gehe davon hier en-US locale)

GetFormatSpecifierText ("C") zurückkehren sollte mich "$" #, ## 0,00

GetFormatSpecifierText ("F") sollte mir zurückkehren „#, ## 0.00

+1

Sie können [benutzerdefiniertes Format] (https://msdn.microsoft.com/en-us/library/0c899ak8 (v = vs.110) .aspx) verwenden. – Sinatr

+0

hast du es versucht? – BugFinder

+0

Eigentlich muss ich Wunschformat übergeben, um zu übertreffen. Also, wenn ich ** "$" #, ## 0,00 ** bekomme, dann kann ich leicht in Excel übergehen und es würde in Währung umgewandelt werden. Aber wenn ich einen Wert übergebe (zB $ 100.00), würde es als String behandelt werden (das ist nicht meine Anforderung). Außerdem weiß ich nicht, was das benutzerdefinierte Format sein würde, also möchte ich zur Laufzeit extrahieren. – NeoAsh

Antwort

0

Blick auf, wie Kultur in Kombination mit dem Formatbezeich verwendet wird. ich glaube, dass Sie für die Überschreibung werden in dem unten code from MSDN:

suchen
public class userOverrideSample 
{ 
    [WebMethod] 
    public String UserLocalSetting() 
    { 
     int i = 100; 

     // Sets the CurrentCulture to French in France. 
     Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR"); 
     // Displays i formatted as currency for the CurrentCulture. 
     // Due to operating system differences, you cannot be sure what currency 
     // symbol will be used. 
     return (i.ToString("c")); 
    } 

    [WebMethod] 
    public String OverrideUserSetting() 
    { 
     int i = 100; 

     // Sets the CurrentCulture to French in France. 
     // Uses the CultureInfo constructor that takes a 
     // useUserOverride parameter. 
     // Sets the useUserOverride value to false. 
     Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR", _ 
     false); 
     // Displays i formatted as currency for the CurrentCulture. 
     // This will override any user settings and display the euro symbol. 
     return (i.ToString("c")); 
    } 
} 
+0

Eigentlich muss ich Wunschformat übertreffen. Also, wenn ich ** "$" #, ## 0,00 ** bekomme, dann kann ich leicht in Excel übergehen und es würde in Währung umgewandelt werden. Aber wenn ich einen Wert übergebe (zB $ 100.00), würde es als String behandelt werden (das ist nicht meine Anforderung). – NeoAsh

+0

Excel ist auch kulturbewusst. Wie geht es Ihnen "übergibt es an Excel" - verwenden Sie Automatisierung - wenn ja, siehe hier: http://stackoverflow.com/questions/1362315/c-sharp-excel-number-formatting-issue-with-international-settings –

+0

Korrekt Murray, aber im Falle einer Währung wird es konstant. Wenn ich fr-FR für die Währungsumrechnung übergebe und Code in en-US tue, wie können wir exakte Währungs formatierte Zeichenketten (die in Währungsformat und arithmetischer Operation operierbar sein müssen) in Excel schreiben? Deshalb frage ich nach Format Pattern String. Übrigens habe ich für mich mit einer kniffligen Lösung für die Währung umgesetzt. Danke für die Antwort und Kommentare. – NeoAsh

0

Ich schreibe unten Code, um Währungsformatmuster zu erhalten.

Hier bestanden param NUMBER als [Währung] #, ## 0.00 und fr-FR locale; und bekam ## 0,00 "€" als Wunsch und erwartet o/p.

static string[] CurrencyPositivePattern = { "$n", "n$", "$ n", "n $" }; 
static string[] CurrencyNegativePattern = { "($n)", "-$n", "$-n", "$n-", "(n$)", 
         "-n$", "n-$", "n$-", "-n $", "-$ n", 
         "n $-", "$ n-", "$ -n", "n- $", "($ n)", 
         "(n $)" }; 

    internal static string GetCurrencyPattern(System.Globalization.NumberFormatInfo numberFormatInfo, string numberFormat) 
    { 
     numberFormat = numberFormat.Replace("[Currency]", string.Empty); 
     int pos = numberFormatInfo.CurrencyPositivePattern; 
     int neg = numberFormatInfo.CurrencyNegativePattern; 
     string currencySymbol = string.Format("\"{0}\"", numberFormatInfo.CurrencySymbol); 
     string excelPattern = string.Concat(CurrencyPositivePattern[pos].Replace("n", numberFormat).Replace("$", currencySymbol), 
      ";", 
      CurrencyNegativePattern[neg].Replace("n", numberFormat).Replace("$", currencySymbol)); 
     return excelPattern; 
    } 

paar Hinweise, die ich für die Umsetzung verwendet: https://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.currencynegativepattern(v=vs.110).aspx https://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.currencypositivepattern(v=vs.110).aspx

Als ich an bestimmten Währungs Format für Excel stucked, ich schreibe spezifischen Code Währung. Andere Formate lassen sich problemlos mit Excel bearbeiten (siehe auch Murray Foxcroft im Kommentar der Antwort).

Verwandte Themen