8

(int)(int1 / (float)var2.Count() * 100)

相当于

(int)((int1 / (float)var2.Count()) * 100)

...它会使用浮点还是整数除法?

编辑...如果上面的答案是肯定的,那么在这里执行浮点除法有什么好处?

4

8 回答 8

13

/并且*在第 7.2.1 节下具有相同的运算符优先级,因此两个结果应该相同(使用float规则)。

然而,我懒得去学习优先表。我只是使用括号。然后它可以在任何语言中工作,而无需记住它。

另一个重要的问题是最终(int)演员的四舍五入:你认为是“向上”、“向下”还是“银行家”?

于 2010-07-19T10:04:45.493 回答
3

优先规则真的很烦人,所以我也更喜欢使用括号来消除歧义。我尝试遵循“首先为人编写代码,其次是计算机”的建议。但是,有一个有趣的助记符(我从 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 ( =, *=, +=, ...)

这并不完美,按位运算符被挤进去了,我们必须知道乘法运算符(*、/、%)优先于加法运算符(+、-)。

于 2010-07-19T15:27:33.773 回答
2

它们是等效的,它将使用浮点除法。即使首先发生乘法,也会使用浮点除法,因为 int 除以 float*int 的结果,即 float。

编辑:

如果上面的答案是肯定的,那么在这里执行浮点除法有什么好处?

是优势吗?您应该考虑的第一件事是它是否正确,因为结果会有所不同。从代码来看,您似乎正在尝试计算某个百分比。使用整数除法时,如果“int1”始终小于 var2.Count(),则结果将始终为 0,这可能不是您想要的。

于 2010-07-19T10:03:34.233 回答
1

我会说是的,除法和乘法应该从左到右。因此它是一个浮点除法。

PS:尽可能float替换 。double

于 2010-07-19T10:04:14.603 回答
1

请参阅 C# 语言规范:运算符优先级和关联性

于 2011-10-31T04:58:59.027 回答
0

一样的。两者都将使用浮点除法。

于 2010-07-19T10:04:04.557 回答
0

是的,两者都是等价的。

两者都将使用浮点除法。

于 2010-07-19T10:05:16.193 回答
0

整数除法只会返回答案的全部部分,即 3/2 将为 1,而浮点除法将为您提供 1.5

于 2010-07-19T10:05:59.360 回答