是
(int)(int1 / (float)var2.Count() * 100)
相当于
(int)((int1 / (float)var2.Count()) * 100)
...它会使用浮点还是整数除法?
编辑...如果上面的答案是肯定的,那么在这里执行浮点除法有什么好处?
是
(int)(int1 / (float)var2.Count() * 100)
相当于
(int)((int1 / (float)var2.Count()) * 100)
...它会使用浮点还是整数除法?
编辑...如果上面的答案是肯定的,那么在这里执行浮点除法有什么好处?
/
并且*
在第 7.2.1 节下具有相同的运算符优先级,因此两个结果应该相同(使用float
规则)。
然而,我懒得去学习优先表。我只是使用括号。然后它可以在任何语言中工作,而无需记住它。
另一个重要的问题是最终(int)
演员的四舍五入:你认为是“向上”、“向下”还是“银行家”?
优先规则真的很烦人,所以我也更喜欢使用括号来消除歧义。我尝试遵循“首先为人编写代码,其次是计算机”的建议。但是,有一个有趣的助记符(我从 Bruce Eckel 的书中学到的)来记住(一些)规则:“ Ulcer Addicts really Like CA lot ”:
Ulcer - Unary (+, -, ++, --, !)
Addicts - Arithmetic (and shift) (+, -, *, /, %, <<, >>)
Really - Relational (<, >, ==, <=, >=, !=)
Like - Logical (and bitwise) (&&, ||, &, |, ^)
C - Conditional ( ? : ) <- this is the conditional ternary operator
A lot - Assignment ( =, *=, +=, ...)
这并不完美,按位运算符被挤进去了,我们必须知道乘法运算符(*、/、%)优先于加法运算符(+、-)。
它们是等效的,它将使用浮点除法。即使首先发生乘法,也会使用浮点除法,因为 int 除以 float*int 的结果,即 float。
编辑:
如果上面的答案是肯定的,那么在这里执行浮点除法有什么好处?
是优势吗?您应该考虑的第一件事是它是否正确,因为结果会有所不同。从代码来看,您似乎正在尝试计算某个百分比。使用整数除法时,如果“int1”始终小于 var2.Count(),则结果将始终为 0,这可能不是您想要的。
我会说是的,除法和乘法应该从左到右。因此它是一个浮点除法。
PS:尽可能float
替换 。double
请参阅 C# 语言规范:运算符优先级和关联性。
一样的。两者都将使用浮点除法。
是的,两者都是等价的。
两者都将使用浮点除法。
整数除法只会返回答案的全部部分,即 3/2 将为 1,而浮点除法将为您提供 1.5