为什么我不能通过使用Int获得百分比

Dao*_*ang 23 c# integer-division

请原谅我的编程知识.我知道这是一件简单的事情,但我不明白为什么结果总是为什么.为什么十进制会很好?

int a = 100;
int b = 200;
decimal c = (a / b) * 100;
Run Code Online (Sandbox Code Playgroud)

非常感谢.

Ada*_*son 58

整数除法总是截断余数.这是在数字被分割时完成的,而不是在分配给变量的时候(正如我猜你假设的那样).

decimal c = ((decimal)a / b) * 100;
Run Code Online (Sandbox Code Playgroud)

  • @ rlb.usa:它是否适当的地板取决于它如何处理负面.不过,我相信它会改变-1.2到-1,而不是-2. (4认同)

bra*_*boy 14

值a/b将始终返回0,因为它们是整数.因此,当评估括号内的值时,您在技术上就是这样做的

decimal c = (0) * 100
Run Code Online (Sandbox Code Playgroud)

做得好,

decimal c = ((decimal)a/(decimal)b) * 100
Run Code Online (Sandbox Code Playgroud)

  • 除非为"a"和"b"给出不同的值,否则"a/b将始终返回0",在这种情况下,它将是"a/b". (2认同)

tlo*_*lin 9

100/200是1/2或0.5.由于您正在使用整数,它会向下舍入为0(零).并且0*100仍为0.括号内的部分始终首先被评估:如果要使其工作,请使用:

decimal c = (a * 100) / b;
Run Code Online (Sandbox Code Playgroud)

编辑:如果你想要一个更精确的值而不是"整数百分比"(即33.333%而不是33%),你应该使用Bragaadeesh的答案.

  • 如果你把它重写为`(a*100M)/ b`,你会得到你想要的结果. (2认同)