23

私のプログラミング知識を許してください。これは簡単なことだと思いますが、結果が常に 0 になる理由がわかりません。

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

どうもありがとう。

4

9 に答える 9

60

整数除算は常に余りを切り捨てます。これは、数値が変数に割り当てられたときではなく、数値が除算されたときに行われます (私が推測しているように)。

decimal c = ((decimal)a / b) * 100;
于 2010-04-08T17:23:14.327 に答える
14

値 a/b は整数であるため、常に 0 を返します。したがって、括弧内の値が評価されるとき、技術的にこれを行っています

decimal c = (0) * 100

したほうがいい、

decimal c = ((decimal)a/(decimal)b) * 100
于 2010-04-08T17:21:30.020 に答える
9

100 / 200 は 1/2 または 0.5 です。int を使用しているため、0 (ゼロ) に切り捨てられます。0 * 100 は 0 のままです。括弧内の部分は常に最初に評価されます。これを機能させたい場合は、次を使用します。

decimal c = (a * 100) / b;

編集:「整数パーセンテージ」(つまり、33% ではなく 33.333%) ではなく、より正確な値が必要な場合は、Bragaadeesh の回答を使用する必要があります。

于 2010-04-08T17:23:10.173 に答える
2

整数演算が実行され、結果が10 進数として格納されます整数演算の 100 / 200 は 0 です。パーセンテージを取得するには、計算を行う前に少なくとも 1 つの値を 10 進数にキャストします。

decimal c = (a / (decimal)b) * 100; 
于 2010-04-08T17:23:47.083 に答える
1

強く型付けされた言語では、数学演算の結果は通常、大きい方の型と同じ型になります。

C#には、実行する暗黙的な数値変換のリストがあります。

このリストの一般化:整数型は浮動小数点型に変換できますが、その逆はできません。整数型も暗黙的にに変換できますdecimalが、浮動小数点型は変換できません。

注:これは、intの1つを別のタイプにキャストすると、回答全体がそのタイプになることも意味します。元:(decimal) a / b * 100.0 = 50.0

tl; dr:

C#の場合:

int / int = int
int + decimal = decimal
decimal + int = decimal
int / int * decimal = (int / int = int) * decimal = decimal
int - float = float
int * double = double
float / decimal = an error
int - uint = an error (either that or ulong)
于 2010-04-08T18:19:15.003 に答える
1

行われている計算は、依然として整数計算です。

(a/b) (100/200 または 1/2) は 2 つの整数に対して実行されるため、結果はゼロになります。ゼロ * 100 は ... まあ、それでもゼロです。

発生している問題は、演算の順序にあります (a と b は整数であるため、整数演算が実行されます)。

私はこれを提案します:

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

これにより、求めている 10 進数値に対して実行される計算が強制されます。

于 2010-04-08T17:28:53.793 に答える
0

整数を使用している場合、この「/」はDIVを表し、この「%」はMODを表します。DIVは除算の商であり、MODは残りです。したがって、100/200 = 0および100%200=100です。

したがって、あなたの場合は、に変更aしてb入力する必要がありdecimalます。

于 2010-04-08T18:14:33.210 に答える
0

成功するdecimal c = (a * 100) / b;

于 2010-04-08T17:23:20.873 に答える
0

int は整数にしかできないため、100/200 は 0 になります。0*100 は 0 のままです。型を 10 進数に変更すると機能します。

于 2010-04-08T17:24:04.353 に答える