私は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
する必要があります。提案された割り当てでは、費用のかかる変換は発生しません。両方のオペランド (および) が整数であるため、 は整数であることに注意してください。昇格は発生せず、整数除算が使用されます。double
int n
double n
n/4
n
4
説明
これはタイプの昇格であり、n
が乗算され、自動的に にdouble
昇格します。プリミティブは上位ランクにのみ昇格でき、下位ランクに降格することはできません。プリミティブは、精度を損なうことなくすべての値を保持できる場合、別のプリミティブよりもランクが高くなります。Aは整数のすべての値を保持できますが、たとえば、整数は を保持できません。したがって、昇格と降格を試みています。詳細については、 MSDN ライブラリを参照してください。n*0.25
double
x
y
y
double
0.1
注: adouble
から an にキャストするint
と、値が切り捨てられます。つまり、「ドット」の後のすべての小数が消去されるため、と に-2.5
なります。上記で使用されているように、整数除算もゼロに丸められ、この割り当てが割り当てと等しくなります。ただし、コストのかかる変換は避けてください。-2
1.5
1
あなたのn
変数はint
. で乗算しようとすると0.25
、0.25
ですdouble
ので、結果は になりますdouble
。toがないImplicit Numeric Conversion
ため、手動でキャストする必要があります。あなたはそれらのために使わなければなりません。double
int
Explicit 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