web-dev-qa-db-ja.com

System.FormatException:入力文字列は、文字列を10進数に変換するときに正しい形式ではありませんでした。

ASP.NETとC#で少し問題があります。これは私のエラーコードです:

タイプ 'System.FormatException'の例外がmscorlib.dllで発生しましたが、ユーザーコードでは処理されませんでした

追加情報:入力文字列の形式が正しくありませんでした。

protected void Page_Load(object sender, EventArgs e)
{
    if(this.IsPostBack == false)
    {
        Currency.Items.Add(new ListItem("Euro", "0.85"));
        Currency.Items.Add(new ListItem("Yen", "11.30"));
        Currency.Items.Add(new ListItem("PLN", "4.20"));
        Currency.Items.Add(new ListItem("GBP", "5.62"));
    }
}

protected void Convert_Click(object sender, EventArgs e)
{
    decimal oldAmount;
    bool succes = Decimal.TryParse(TextBox.Value, out oldAmount);

    if(succes)
    {
        ListItem item = Currency.Items[Currency.SelectedIndex];
        decimal newAmount = oldAmount * decimal.Parse(item.Value);
        Result.InnerText = "Result: " + newAmount;
    }

}

Decimal.Parse、Decimal.TryParse、その他の奇妙な組み合わせを試しました。今、私は問題が文字列とそれらを10進数に解析することであると確信しています。文字列変数を作成したとき-解析中に同じエラーが発生しました。では、文字列を10進数に変換するために何をすべきかを誰かに教えてもらえますか?

6
user2855304

「0.85」の代わりに「0,85」を使用してみてください。カルチャーを変えればドット10進数が使えると思います。ここにいくつかの詳細があります: 小数点の記号をdouble.ToString()で変更する方法

5
sn1ckers

以下のコードスニペットでお試しください。

CultureInfo info = CultureInfo.GetCultureInfo("es-ES");
string storedValue = "3,85";
decimal oldAmount;
bool succes = Decimal.TryParse(storedValue, NumberStyles.Any, info, out oldAmount);
2
Jayesh Goyani

代わりにTextBox.Textを使用します。

bool succes = Decimal.TryParse(TextBox.Text, out oldAmount);
0
David Brossard

TextBox.valueが間違っています。 YourTextBox.Textは正しい...!

bool success = Decimal.TryParse(TextBox.Text, out oldAmount);
0
Usman Tariq