以下的差异在C#中会显著吗?
int a, b;
double result;
result = (double)a / b;
result = a / (double)b;
result = (double)a / (double)b;
你使用哪个?
以下的差异在C#中会显著吗?
int a, b;
double result;
result = (double)a / b;
result = a / (double)b;
result = (double)a / (double)b;
你使用哪个?
划分之前进行强制类型转换。
在你的示例中,无论你执行哪个操作数,如果一个操作数是double类型,运行时会将另一个操作数也转换为double类型。
这看起来像是微观优化——除非测量结果表明它确实是瓶颈,否则不值得担心或处理。
I do this:
result = (double)a / (double)b;
这可能严格来说是不必要的,但通常我想要确保它不会执行整数除法,而且我并不在乎记住这种情况的具体规则,所以更明确一些(即使需要多按一些键)也更容易。
我这样写(double)a / b
是因为我把int想象成像石头一样不可分割的东西。当转换成double类型后,它就可以被分割,就像蛋糕一样。你可以将3.0个蛋糕分成四份,但你不能将三块石头分成4.0份。或者说是这个意思。有道理吗?
result = (double)(a/b);
。 - Emonda
和b
已经是双精度浮点数。结果变量也是双精度浮点数。唯一不是双精度浮点数的是两个双精度浮点数相除的结果。如果我没记错的话,在这种情况下可以将整数自然转换为双精度浮点数。 - Security Houndresult = a / b
将导致整数除法,然后转换为双精度浮点数。 - Msonic