1

TAFE の課題があり、相談時間 (1 時間あたり 25 ドル) に基づいて相談の費用を計算するコンソール プログラムを Visual Studio で作成する必要があります。

string hours, rate, total;
Console.Write("Enter consultation time in hours");
hours = Console.ReadLine();
rate = ;
total = hours * rate;
Console.WriteLine("Fee is " + total);

私の問題は 5 行目にあり、「演算子 '*' はタイプ 'string' および 'string; のオペランドに適用できません。」というエラーが表示されます。

誰かが私に何が間違っているのか、なぜ2つの文字列を掛けることができないのか、またその行を機能させる別の方法を提供できますか?

編集:皆さんありがとうございます。与えられたすべての情報は役に立ちました。ユーザー入力によって変更されない設定値として、レートを整数として残して完了しました。時間と合計はまだ文字列です。convert.ToDecimal 行を介して 10 進数に変換する時間は、GianlucaBobbio から提供されました。現在の唯一の問題は、レート * 時間の計算後にコンソールが開いたままにならないことですが、それを修正できます。

あなたはちょうど新しい通常のユーザーを持っているかもしれません:D! 助けに感謝します。あなたはすべての命の恩人です:)

4

4 に答える 4

2

両方の文字列を 10 進数に変換する必要があるため、それらを乗算して、最後に再度文字列に変換できます。したがって、 de Convert メソッドを使用できます。

string hours, rate, total;
Console.Write("Enter consultation time in hours");
hours = Console.ReadLine();
rate = ;
total = Convert.ToString(Convert.ToDecimal(hours) * Convert.ToDecimal(rate));
Console.WriteLine("Fee is " + total);

彼が有効な数値を入力した場合に処理するには、bool 値を返す decimal.TryParse(string, decimal) を使用できます。文字列が 10 進数値の場合は、10 進数のような out 変数になります。

string hours, rate, total;
Console.Write("Enter consultation time in hours");
hours = Console.ReadLine();
rate = ;
decimal hourInput = 0;
if(!decimal.TryParse(hours, out hourInput)
{
    Console.Write("Thats not a number!");
}
else
{
    total = Convert.ToString(hourInput * Convert.ToDecimal(rate));
    Console.WriteLine("Fee is " + total);
}

私の悪い英語でごめんなさい

于 2013-08-13T18:03:39.653 に答える
1

C# の型システムでは多くの推論ができません。たとえば、JavaScript や Ruby とは異なり、文字列に対して算術演算を実行しようとしても、暗黙的に文字列を数値型に変換することはありません。代わりに、ユーザーの入力を String から何らかの数値型に明示的に変換する必要があります。1 つのアプローチを次に示します。

string hours;
decimal numericHours, rate, total;

Console.Write("Enter consultation time in hours");
hours = Console.ReadLine();
if (!Decimal.TryParse(hours, out numericHours))
{
    Console.WriteLine(String.Format("{0} doesn't appear to be a valid number of hours. Please enter a numeric value.", hours));
}
else
{
    rate = 35.6;
    total = numericHours * rate;
    Console.WriteLine("Fee is " + total);
}

このifステートメントは、さらに説明する価値があります。Decimal.TryParse()は、2 つの効果を持つ .NET フレームワークのまれなメソッドの 1 つです。最初のパラメーターを type のデータとして正常に解析できるかどうかに応じて、 true または false を返しますdecimaloutキーワードで装飾された 2 番目のパラメーターにはdecimal、解析が成功した場合の結果の値が含まれます。

いくつかのボーナス .NET ヒント:文字列への変数の挿入を制御するためにString.Format()+を使用していることに注意してください。文字列連結演算子よりも使いやすいと思います。また、他の回答が指摘しているように、バイナリ表現が異なるため、型doubleと型に対して算術演算が多少異なる方法で実行されます。decimal正確な小数値、特に通貨を扱う場合は、decimal型を優先します。

于 2013-08-13T18:08:50.327 に答える