2016-05-25 5 views
1

Существует много спецификатора формата в .net, например. C для валюты, D для десятичного. Количество определенных форматов может быть here.Получить строку точного формата относительно спецификатора заданного формата

Как получить точный формат спецификатора формата в соответствии с заданным языком.

E.g. (Я предполагаю, что здесь ан-US локали)

GetFormatSpecifierText ("C") должен вернуть мне "$" #, ## 0,00

GetFormatSpecifierText ("F") должен вернуть мне «# ## 0,00

+1

Вы можете использовать [формат пользовательских номеров] (https://msdn.microsoft.com/en-us/library/0c899ak8 (v = vs.110) .aspx). – Sinatr

+0

Вы попробовали? – BugFinder

+0

На самом деле мне нужно передать формат желания, чтобы преуспеть. Так что, если я получу ** "$" #, ## 0.00 **, то я могу легко перейти в excel, и он будет преобразован в валюту. Но если я передам какое-то значение (например, $ 100,00), тогда он будет рассматриваться как строка (это не мое требование). Далее я не знаю, какой будет пользовательский формат, поэтому я хочу извлечь его во время выполнения. – NeoAsh

ответ

0

Посмотрите на то, как культура используется в сочетании с спецификаторов формата. Я считаю, что вы можете искать переопределения в ниже code from MSDN:

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

На самом деле мне нужно передать формат желаний. Так что, если я получу ** "$" #, ## 0.00 **, то я могу легко перейти в excel, и он будет преобразован в валюту. Но если я передам какое-то значение (например, $ 100,00), тогда он будет рассматриваться как строка (это не мое требование). – NeoAsh

+0

Excel также осведомлен о культуре. Как вы «передаете его в Excel» - вы используете автоматизацию - если это так, см. Здесь: http://stackoverflow.com/questions/1362315/c-sharp-excel-number-formatting-issue-with-international-settings –

+0

Правильный Мюррей, но в случае валюты он становится постоянным. Если я перейду fr-FR для конвертации валюты и сделаю код в en-US, как мы можем написать точную строку форматированной валюты (которая должна быть в формате валюты и арифметической операции, действующей) в excel? Вот почему я прошу форматировать строку шаблона. Кстати, я применил для меня валюту с некоторым сложным решением. Спасибо за ответ и комментарии. – NeoAsh

0

Я пишу ниже, чтобы получить шаблон валютного формата.

Здесь прошел пары NumberFormat, как [Валюта] #, ## 0,00 и FR-FR локали; и получил # ## 0,00 «€ как желание и ожидаемое о/р.

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; 
    } 

Немного литературы, которые я использовал для реализации: 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

Как я stucked в конкретном формате валюты для первенствует, я пишу валюты специальный код. Другие форматы легко обрабатываются excel (то же самое также прокомментировал Murray Foxcroft в комментарии ответа).