2011-10-27 162 views
2

为什么我的C#代码返回0,如果它必须是50?C#中的算术运算

double c = (1/2) * 100; 
Console.WriteLine(c); 

有什么不好?

+1

正确的,我很愚蠢男子) – Wachburn

回答

5

1,2100,在你的例子中,都是int文字。在C#中,整数除法返回整数,并忽略余数。只有计算1/2(= 0),乘以100(= 0)不结果转换为:double

(1.0/2) * 100 

后,将给予预期的结果,因为现在1.0double文字,并迫使其他文字在执行计算之前也要转换为double

2

1/2 = 0

这是整数除法。

尝试1.0/2,或为什么不double c = 50.0直接)

2

使用此:(浮点)1 /(浮点)2。 1和2是整数。

2

尝试

double c = (1.0/2.0) * 100.0; 

编辑:行动。 F是不必要的。 :(

+3

为什么使用'F'类型后缀强制类型为'float',如果没有后缀,文字将是'double',并且匹配所需的最终结果类型? –

+0

因为首先执行(1/2)是返回0的*整数*除法,则将0乘以100再次返回0。至少将0转换为double并分配给变量c。 –

+0

我的意思是'1.0'是一个双字面意思。 '1.0F'是一个浮点文字。既然你要分配一个'double',为什么不把它整个加倍呢? –

0

我想你需要^

double c = (1/2) * 100; 
Console.WriteLine(c); 

它的结果:50

+1

那就像原始代码一样? –

1

编译器会推断出类型1和2为System.Int32,不是双

double c = (1.0/2.0) * 100; 
Console.WriteLine(c); 

应该给你正确的结果

2

如果你想一个整数被视为双,使用后缀d或d

MSDN Link here

代码片段:

double d = (1d/2) * 100; 

double d = (1/2d) * 100; 

甚至

double d = (1d/2d) * 100;