请原谅我的编程知识。我知道这是一个简单的问题,但我不明白为什么结果始终为0。为什么用小数会好些呢?
int a = 100;
int b = 200;
decimal c = (a / b) * 100;
感谢您的提问。int a = 100;
int b = 200;
decimal c = (a / b) * 100;
感谢您的提问。整数除法总是截断余数。 这是在进行除法运算时完成的,而不是在将数字分配给变量时(我猜想您可能已经假设过这一点)。
decimal c = ((decimal)a / b) * 100;
由于a和b是整数,因此a/b的值始终为0。因此,当计算括号中的值时,实际上是在进行以下操作:
decimal c = (0) * 100
最好这样做:
decimal c = ((decimal)a/(decimal)b) * 100
a
和 b
指定不同的值,否则 a/b
始终返回 0。如果有不同的值,则其结果将为 a / b
。 - Jeffrey L Whitledge100 / 200等于1/2或0.5。由于您正在使用整数,它会向下舍入为0(零)。而且0 * 100仍然是0。括号内的部分总是首先计算:如果您想让它工作,请使用:
decimal c = (a * 100) / b;
编辑:如果您想要更精确的值而不是“整数百分比”(即33%而不是33%),您应该使用Bragaadeesh的答案。
(a * 100M) / b
,你将得到你想要的结果。 - Anthony Pegram正在执行整数计算,结果然后存储为十进制数。在整数计算中,100 / 200的结果是0。要获得百分比,请在进行计算之前将至少一个值转换为十进制数。
decimal c = (a / (decimal)b) * 100;
decimal
,但浮点类型则不能。(decimal) a / b * 100.0 = 50.0
简而言之: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)
100 / 200 * 100.0
得出了一个小数结果,它仍然是0 - 请注意。 - ANeves100 / 200 * 100.0 = (100 / 200 = 0) * 100.0 = 0.0
- Powerlord所做的数学运算仍然是整数运算。
(a/b) (100/200 或 1/2) 是在两个整数上进行的,因此结果为零。 零 * 100 还是零。
您遇到的问题与操作顺序有关(a 和 b 是整数,因此执行整数运算)。
我建议这样做:
decimal c=((decimal)a)/((decimal)b)*100;
这将强制执行所需的十进制值。
将其改为 decimal c = (a * 100) / b;
(a * 100M) / b
,就能得到你想要的结果。 - Anthony Pegram整数类型 int 只能表示整数,所以 100/200 的结果是 0。0*100 仍然是 0。将类型改为小数型,就可以解决这个问题。