2013-12-19 84 views
1

我的问题是太奇怪了,简:奇怪的结果在C#

double a = 1/2; 
MessageBox.Show(a.ToString()); 

这表明0 我试图与decimalfloat但它总是0

+3

因为1/2的整数除法为零。无关紧要你分配零。 –

+0

您需要了解编译器处理输入的差异和方式! (int)1 /(int)2将得到int的结果! – WhileTrueSleep

+0

这里的故事的寓意是:**对于C#中的大多数表达式,表达式的类型分析独立于它被分配给**的内容。仅仅因为您将其分配给双倍,“1/2”的值不会改变。 (这个规则的例外是lambda,它根据分配的内容改变它们的含义。) –

回答

11

你需要写:

double a= 1/2.0d; 

int除以int编译器生成01在将其分配给double之后,结果和

这是同样喜欢写作:

int resultInt = 1/2; 
double a = resultInt; 

通过在您操作2.0d指定你明确地体现你的意图后,等分生产double

+1

或者也是1.0/2 :-) – Grundy

+0

我个人更喜欢提升分子,因为它稍微更清楚。 – Bathsheba

4

12都被视为整数常量。 int除以int的结果是另一个int,在投射到double之前。向编译器指示至少有一个常量是后缀为d或提供小数点的两倍。

例如

double a = 1d/2d; 
5

的划分,在整数运算这意味着你将失去精度之前的结果分配给您的double类型执行。

将其中一个文字升到double,强制执行浮点数。即写

double a = 1.0/2; 
2

尝试这种情况:

双A =(双)1 /(双)2;

Regards,