时
(int)(int1 / (float)var2.Count() * 100)
相当于
(int)((int1 / (float)var2.Count()) * 100)
...它会使用浮点数还是整数除法?
编辑...如果答案是肯定的,那么在这里执行浮点除法有什么好处?
答案 0 :(得分:12)
/
和*
具有相同的运算符优先级,因此两个结果应该相同(使用float
规则)。
另一个重要的问题是最后(int)
演员阵容的四舍五入:你是否期望这是“向上”,“向下”或“银行家”?
答案 1 :(得分:3)
优先规则真的很难记住,所以我也更喜欢使用括号来消除歧义。我尝试遵循建议“先为人们编写代码,然后再为计算机编写代码”。但是,有一个有趣的助记符(我从布鲁斯·埃克尔的书中学到的)要记住(某些)规则:“溃疡成瘾者真的很喜欢C ”:
Ulcer - Unary (+, -, ++, --, !)
Addicts - Arithmetic (and shift) (+, -, *, /, %, <<, >>)
Really - Relational (<, >, ==, <=, >=, !=)
Like - Logical (and bitwise) (&&, ||, &, |, ^)
C - Conditional ( ? : ) <- this is the conditional ternary operator
A lot - Assignment ( =, *=, +=, ...)
它并不完美,按位运算符被挤入,我们必须知道乘法运算符(*,/,%)优先于加法运算符(+, - )。
答案 2 :(得分:2)
它们是等效的,它将使用浮点除法。即使乘法首先发生,也会使用浮点除法,因为int除以float * int的结果,即float。
修改强>
如果上面的答案是肯定的,那么在这里执行浮点除法有什么好处?
这是一个优势吗?你应该考虑的第一件事是它是否正确,因为结果会有所不同。从代码来看,你似乎在试图计算一些百分比。当使用整数除法时,如果“int1”总是小于var2.Count(),则结果将始终为0,这可能不是您想要的。
答案 3 :(得分:1)
我会说是的,除法和乘法应该是从左到右。因此它是一个浮动部门。
PS:尽可能用float
替换double
。
答案 4 :(得分:1)
请参阅C#语言规范:Operator precedence and associativity。
答案 5 :(得分:0)
它是一样的。两者都将使用浮动分割。
答案 6 :(得分:0)
是的,两者都是等价的。
两者都将使用浮点除法。
答案 7 :(得分:0)
整数除法只会给出答案的整个部分,即3/2将为1而浮点除法将给出1.5