0

私は銀行システムを作成していますが、顧客は 10 進数の区切り文字でロシアとアメリカの両方の数値標準をサポートすることを望んでいます。それぞれ.,.

,正常に動作するようになりました。おそらくWebサーバーのOS形式(ロシア語が設定されている)のせいでしょう。

次のような文字列が2000.00スローされますFormatException:

入力文字列は、正しい形式ではありませんでした。

それを修正する方法は?次の 2 つのアイデアがあります。

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

他のアイデアはありますか?

4

2 に答える 2

3

最初にロシア語形式への解析を試み、(失敗した場合は) 次に米国への解析を試みることができます。

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値の両方で機能するはずです。

また、私の知る限り、クラスはセパレーターにNumberFormatInfo複数の値を受け入れません(またはプロパティなど)。",."NumberDecimalSeparatorCurrencyDecimalSeparator

米国の文化ではグループの区切り記号としてコンマ記号が使用されているため ( RUString.Replaceはスペースを使用)、これもあまり良い考えではないとします。

于 2010-05-05T10:13:23.593 に答える
1

通貨にString.Formatを使用するのはどうですか?

短い例を次に示します。

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

String.Format +特定のカルチャの使用方法に関する情報は、ここにあります。

于 2010-05-05T10:15:13.010 に答える