Разобрать оба символа.и, как разделитель десятичных цифр в ASP.NET - PullRequest
0 голосов
/ 05 мая 2010

Я пишу банковскую систему, и мой клиент хочет поддерживать российские и американские числовые стандарты в качестве разделителя десятичных знаков. Соответственно . и ,.

Теперь только , работает правильно. Возможно из-за формата ОС веб-сервера (установлен русский).

Строка, как 2000.00, выбрасывает FormatException:

Входная строка была в неправильном формате.

Как это исправить? У меня есть следующие две идеи:

protected void FormView1_ItemInserting(object sender, FormViewInsertEventArgs e)
{
   var txtAmount = (TextBox)((FormView)sender).FindControl("txtAmount"));
   txtAmount.Text = txtAmount.Text.Replace('.', ',');
}

или

protected void FormView1_ItemInserting(object sender, FormViewInsertEventArgs e)
{
   var ru = new CultureInfo("ru-RU");
   var en = new CultureInfo("en-US")

   decimal d;
   var txtAmount = (TextBox)((FormView)sender).FindControl("txtAmount"));
   if (!Decimal.TryParse(value, NumberStyles.Any, ru, out d)
     && Decimal.TryParse(value, NumberStyles.Any, en, out d)
   {
       // data isn't in Russian format but is in American
       txtAmount.Text = d.ToString(ru);
   }
}

Есть еще идеи?

Ответы [ 2 ]

3 голосов
/ 05 мая 2010

Вы можете попробовать сначала разобрать в русский формат, а затем (в случае неудачи) - в США:

CultureInfo ru = CultureInfo.GetCultureInfo("ru-RU");
CultureInfo us = CultureInfo.GetCultureInfo("en-US");

string value = "2000,00";
decimal result;
if (!decimal.TryParse(value, NumberStyles.Any, ru, out result))
{
    if (!decimal.TryParse(value, NumberStyles.Any, us, out result))
    {
        throw new FormatException();
    }
}

Это должно работать как для значений 2000,00, так и 2000.00.

Кроме того, класс AFAIK NumberFormatInfo не принимает несколько значений для разделителей (например, ",." для NumberDecimalSeparator или CurrencyDecimalSeparator свойств).

Предположим, что String.Replace также не очень хорошая идея, поскольку культура США использует символ запятой в качестве разделителя групп (RU использует пробел).

1 голос
/ 05 мая 2010

Как насчет использования String.Format для валюты?

Вот краткий пример:

decimal money = 999.99m;
string html = String.Format("Total: {0:C}", money);

Информацию о том, как использовать String.Format + для конкретной культуры, можно найти здесь.

...