なぜ私はのIntを使用してパーセンテージを得ることができません

StackOverflow https://stackoverflow.com/questions/2602025

  •  25-09-2019
  •  | 
  •  

質問

私のプログラミングの知識はご容赦下さい。私は、これは単純なことですけど、小数点以下の罰金になるのはなぜ結果は常に0である理由私は理解していない?

int a = 100;
int b = 200;
decimal c = (a / b) * 100;

感謝します。

役に立ちましたか?

解決

整数除算は常に剰余を切り捨て。これは数が分割されている時に行われ、のないのそれは(私は推測しているとして、あなたが想定さ)。変数に割り当てられているとき、

decimal c = ((decimal)a / b) * 100;

他のヒント

彼らは整数であるため、

値/ bは常に0を返します。括弧内の値が評価されている場合だから、技術的には、

これをやっています
decimal c = (0) * 100

より良い行い、

decimal c = ((decimal)a/(decimal)b) * 100

200分の100は1/2又は0.5です。あなたはint型を使用しているので、それが0(ゼロ)に切り捨て。そして、0 * 100は、括弧内の部分は常に最初に評価され、まだ0です:あなたはこの作業を取得したい場合は、使用します:

decimal c = (a * 100) / b;

編集:あなたは、より正確な値ではなく、「整数比率」(。つまり、代わりに33%の33.333パーセントを)したい場合、あなたはBragaadeeshの答えを使用する必要があります。

整数演算が実行され、その結果は、次には小数として格納されています。整数演算では100/200は、計算を行う前に、小数点に少なくとも一つの値があなたの割合、キャストを取得するには0です。

decimal c = (a / (decimal)b) * 100; 

行われている数学は数学整数まだあります。

結果がゼロになるように

(/ b)は(100/200又は1/2)、二つの整数で行われます。ゼロ* 100は...まあ、まだゼロます。

あなたが経験している問題は、操作の順序(aとbは数学が行われるので、整数、整数である)である。

私はこれを提案します

decimal c=((decimal)a)/((decimal)b)*100;

これは、あなたが求める小数点値に行っ数学を強制されます。

intが唯一100/200ように0 0 * 100はまだ10進数タイプの変更は0であることを行っている、全体の数字とすることができ、それが

に動作します

それdecimal c = (a * 100) / b;

作ります
整数を使用している間、

は、これは「/」DIVとMODのために、この「%」の略です。 DIVは除算の商で、MODは休みです。だから、100/200 = 0と100%200 = 100。

だから、あなたはあなたのケースでは、aに変更しbdecimalタイプにする必要があります。

scroll top