1

私はC#でパーセンテージを減算しようとしています:

n = n - (n * 0.25);

しかし、エラーが発生します:

「暗黙的に「double」から「int」に変換することはできません。明示的な変換が存在します(キャストがありませんか?)」

4

10 に答える 10

3

あなたの値nintです。

0.25( a である)を掛けるdoubleと、結果の値は adoubleに代入しようとする a になりintます。

それを解決するには、「明示的な変換」を使用して精度が失われることを認識していることを指定する必要があります。

n = n - (int)(n * 0.25);

することを「(Type)valueキャストvalueするType」といいます。これはまさに、エラー メッセージで推奨されていることです。

または、精度を維持したくない場合は、 ではnなく として宣言intdoubleます。この場合、 にキャストn * 0.25する必要はありませんint

于 2013-01-30T11:30:44.170 に答える
2

int 型と double 型の間で前後に切り替えたくない場合は、次のように使用できます。

n = (n * 75) / 100

あなたの答えに小数がある場合、それらは失われます

于 2013-01-30T12:04:07.530 に答える
0

変数nは整数である必要がありますが、double(0.25)による乗算が含まれるため、計算結果はdoubleになります。

結果を次のようにintにキャストして戻すことができます。

n = (int)(n - (n * 0.25));
于 2013-01-30T11:31:29.627 に答える
0

手がかりがないので、nそれは整数型だと思います。intこの場合、最も簡単な解決策は次のことです。

n = Convert.ToInt32(n - (n * 0.25));

または、キャストできます:

n = (int)(n - (n * 0.25));
于 2013-01-30T11:31:39.843 に答える
0

変数'n'のタイプを確認してください。

'n'はdouble型である必要があります。

または

明示的なキャストを使用してintに変換します。

int n = (int)(n - (n * 0.25));
于 2013-01-30T11:31:40.330 に答える
0

最善の方法は、

 n = n - n/4;

パーセンテージを 0 から 100 までの整数にしたい場合は、を に置き換えて を宣言nする必要があります。提案された割り当てでは、費用のかかる変換は発生しません。両方のオペランド (および) が整数であるため、 は整数であることに注意してください。昇格は発生せず、整数除算が使用されます。doubleint ndouble nn/4n4

説明

これはタイプの昇格であり、nが乗算され、自動的に にdouble昇格します。プリミティブは上位ランクにのみ昇格でき、下位ランクに降格することはできません。プリミティブは、精度を損なうことなくすべての値を保持できる場合、別のプリミティブよりもランクが高くなります。Aは整数のすべての値を保持できますが、たとえば、整数は を保持できません。したがって、昇格と降格を試みています。詳細については、 MSDN ライブラリを参照してください。n*0.25doublexyydouble0.1

注: adoubleから an にキャストするintと、値が切り捨てられます。つまり、「ドット」の後のすべての小数が消去されるため、と に-2.5なります。上記で使用されているように、整数除算もゼロに丸められ、この割り当てが割り当てと等しくなります。ただし、コストのかかる変換は避けてください。-21.51

于 2013-01-30T12:29:18.200 に答える
0

あなたのn変数はint. で乗算しようとすると0.250.25ですdoubleので、結果は になりますdouble。toがないImplicit Numeric Conversionため、手動でキャストする必要があります。あなたはそれらのために使わなければなりません。doubleintExplicit Numeric Conversion

From --> To

double --> sbyte , byte, short, ushort, int, uint, long, ulong, char, float, or decimal

正しい式を に変換する必要がありますint

int n = 100;
n = (int) (n - (n * 0.25));
Console.WriteLine(n);

ここに がありDEMOます。

そして覚える;

  • 明示的な数値変換により、精度が失われる可能性があります。
  • double値から整数型に変換すると、値が切り捨てられます。結果の整数値が宛先値の範囲外である場合、結果はオーバーフロー チェック コンテキストに依存します。
于 2013-01-30T11:33:04.837 に答える
0

結果を int にキャストする必要があります

n=(int)(n-(n*0.25));
于 2013-01-30T11:33:20.373 に答える
0

試す:

n = n - (int)((double)n * 0.25);

注:これを行うと、n結​​果のポイントの後ろに数字が表示されなくなります。

于 2013-01-30T11:34:22.170 に答える
0

intこれは、 n のタイプが最小限である必要があるという問題である可能性があると思いますdouble

したがってn = n - (n * 0.25)、結果が double の場合

int としてキャストしたい場合は、常にで終わるとは限らないため、丸めに注意してください.00

また、私はこれが良いと思いますn = n * 0.75

于 2013-01-30T11:39:05.257 に答える