1
    private void updateButton_Click(object sender, EventArgs e)
    {
        //custID.Text = customers[id].ID.ToString();
        customers[id].Name = custName.Text.ToString();
        customers[id].Suburb = custSuburb.Text.ToString();
        customers[id].Balance = custBal.Text;
        customers[id].Year_used = custYear.Text;
    }

}


public class Customer
{
    protected string id;
    protected string name;
    protected string suburb;
    protected double balance;
    protected double year_used;

    public string ID
    {
        get { return id; }
    }

    public string Name
    {
        get { return name; }
        set { value = name; }
    }

    public string Suburb
    {
        get { return suburb; }
        set { value = suburb; }
    }

    public double Balance
    {
        get { return balance; }
        set { value = balance; }
    }

    public double Year_used
    {
        get { return year_used; }
        set { value = year_used; }
    }


    public Customer(string id, string name, string suburb, double balance, double year_used)
    {
        this.id = id;
        this.name = name;
        this.suburb = suburb;
        this.balance = balance;
        this.year_used = year_used;
    }

}

コードを実行しようとすると、このエラーが発生するようです?? 問題のように思われるのは、intを2倍にするすべてを変更したことです。

と同様:

        customers[id].Balance = custBal.Text;
        customers[id].Year_used = custYear.Text;

custBalの適切なコードは何でしょうか。とcustYear。フォームに表示するには?何か案は?

4

5 に答える 5

2

適切にフォーマットされた数値が含まれていることがわかっている場合、必要なのは、各文字列に含まれる数値を解析し、それをdouble型変数に割り当てることです(これには、文字列としての数値の表現を別の2進数に変換することが含まれます)内容:double)、キャストしない(キャストしない)。試す:

customers[id].Balance = Double.Parse(custBal.Text);
customers[id].Year_used =  Double.Parse(custYear.Text);

または、例外処理を実行してFormatExceptionをテストする代わりに、返されたブール値に対して解析の成功をテストする場合は、代わりにTryParseを使用できます。

if (!Double.TryParse(custBal.Text, customers[id].Balance))
   Console.WriteLine("Parse Error on custBal.Text");
if (!Double.TryParse(custYear.Text, customers[id].Year_used))
   Console.WriteLine("Parse Error on custYear.Text");

より詳しい情報:

http://msdn.microsoft.com/en-us/library/t9ebt447%28v=vs.80%29.aspx

http://msdn.microsoft.com/en-us/library/994c0zb1.​​aspx

于 2012-10-07T12:03:53.053 に答える
2

ユーザーが天びんを入力してテキストを入力しているので、テキストを数字で表すことができることをどのようにして知ることができますか?C#では、文字列について実質的な仮定を行わずに文字列をdoubleに暗黙的に変換することはできません。暗黙的な変換では例外がスローされないため(フレームワーク設計ガイドライン)、暗黙的に提供しないことをお勧めします。まったく変換。

たとえば、残高であるため、ユーザーが「(100.25)」、「-100.25」、「-$ 100.25」、「-€100,25」、「負の125セント」と入力した場合はどうなりますか。それらは有効な文字列ですが、どのようにそれらをdoubleに変換しますか?

答えは、正解は1つではないということです。つまり、意味のある方法で文字列をdoubleにマップできます。もちろん、フォームの独自の関数を作成することもできますがFunc<String, double>、最も一般的で直感的な変換を実装する.NetFrameworkによって提供される関数があります。

他にも投稿されdouble.Parsedouble.TryParseいるので、必要に応じて調べてみてNumberStylesくださいIFormatProvider

于 2012-10-07T12:20:11.237 に答える
1

直接割り当てるstringことはできません。double次のように、文字列を解析してdoubleに割り当てる必要があります。

customers[id].Balance = double.Parse(custBal.Text);
customers[id].Year_used = double.Parse(custYear.Text);
于 2012-10-07T12:04:04.880 に答える
1

文字列をDoubleに変換するために使用する必要がありDouble.TryParse()ます。Doubleデータ型に文字列を保存することはできず、c#でそれを行うための暗黙的な変換はありません。

Double result;
Double.TryParse(custBal.Text,out result);
于 2012-10-07T12:03:15.523 に答える
0

'String'を'Double'に変換する最良の方法は、以下に示すように、TryParseを使用することです。

int result;

if (double.TryParse(custBal.Text, out result))
    customers[id].Balance = result;
if (double.TryParse(custYear.Text, out result))
    customers[id].Year_used = result;
于 2012-10-07T12:11:33.887 に答える