私はC#でパーセンテージを減算しようとしています:
n = n - (n * 0.25);
しかし、エラーが発生します:
「暗黙的に「double」から「int」に変換することはできません。明示的な変換が存在します(キャストがありませんか?)」
私はC#でパーセンテージを減算しようとしています:
n = n - (n * 0.25);
しかし、エラーが発生します:
「暗黙的に「double」から「int」に変換することはできません。明示的な変換が存在します(キャストがありませんか?)」
あなたの値nはintです。
0.25( a である)を掛けるdoubleと、結果の値は adoubleに代入しようとする a になりintます。
それを解決するには、「明示的な変換」を使用して精度が失われることを認識していることを指定する必要があります。
n = n - (int)(n * 0.25);
することを「(Type)valueキャストvalueするType」といいます。これはまさに、エラー メッセージで推奨されていることです。
または、精度を維持したくない場合は、 ではnなく として宣言intしdoubleます。この場合、 にキャストn * 0.25する必要はありませんint。
int 型と double 型の間で前後に切り替えたくない場合は、次のように使用できます。
n = (n * 75) / 100
あなたの答えに小数がある場合、それらは失われます
変数nは整数である必要がありますが、double(0.25)による乗算が含まれるため、計算結果はdoubleになります。
結果を次のようにintにキャストして戻すことができます。
n = (int)(n - (n * 0.25));
手がかりがないので、nそれは整数型だと思います。intこの場合、最も簡単な解決策は次のことです。
n = Convert.ToInt32(n - (n * 0.25));
または、キャストできます:
n = (int)(n - (n * 0.25));
変数'n'のタイプを確認してください。
'n'はdouble型である必要があります。
または
明示的なキャストを使用してintに変換します。
int n = (int)(n - (n * 0.25));
最善の方法は、
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
あなたのn変数はint. で乗算しようとすると0.25、0.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値から整数型に変換すると、値が切り捨てられます。結果の整数値が宛先値の範囲外である場合、結果はオーバーフロー チェック コンテキストに依存します。結果を int にキャストする必要があります
n=(int)(n-(n*0.25));
試す:
n = n - (int)((double)n * 0.25);
注:これを行うと、n結果のポイントの後ろに数字が表示されなくなります。
intこれは、 n のタイプが最小限である必要があるという問題である可能性があると思いますdouble
したがってn = n - (n * 0.25)、結果が double の場合
int としてキャストしたい場合は、常にで終わるとは限らないため、丸めに注意してください.00
また、私はこれが良いと思いますn = n * 0.75