C# C语言中的算术运算#

C# C语言中的算术运算#,c#,.net,C#,.net,如果必须是50,为什么我的C#代码返回0 double c = (1 / 2) * 100; Console.WriteLine(c); 怎么了 1/2=0 这是整数除法 试试1.0/2,或者直接double c=50.0) 使用这个:(浮动)1/(浮动)2。1和2是整数。1,2和100,在您的示例中,都是int文本。在C#中,整数除法返回整数,并忽略余数。只有在计算1/2(=0)并乘以100(=0)后,结果才会转换为double (1.0/2) * 100 将给出预期的结果,因为现在1.

如果必须是50,为什么我的C#代码返回0

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

1/2=0

这是整数除法


试试
1.0/2
,或者直接
double c=50.0

使用这个:(浮动)1/(浮动)2。1和2是整数。

1
2
100
,在您的示例中,都是
int
文本。在C#中,整数除法返回整数,并忽略余数。只有在计算1/2(=0)并乘以100(=0)后,结果才会转换为
double

(1.0/2) * 100
将给出预期的结果,因为现在
1.0
是一个
double
文本,并在执行计算之前强制将其他文本转换为
double
s。

尝试使用

double c = (1.0 / 2.0) * 100.0;
编辑:Ops。F是不必要的(

我想你需要^

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

它的结果是:50

编译器将推断System.Int32的1和2的类型,而不是double

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

应该给出正确的结果

如果要将整数视为双精度,请使用后缀d或d

代码段:

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

甚至

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

为什么要使用类型后缀
F
强制类型为
float
,当没有后缀时,文本将是
,并且与所需的最终结果类型匹配?因为首先执行(1/2)这是一个返回0的整数除法,然后将0乘以100,再次返回0。至少0被转换为double并分配给变量c。我的意思是
1.0
是一个双字面值。
1.0F
是一个浮点字面值。既然要分配给
double
,为什么不让它一直加倍?@David如果回答错误,请尝试
double c=(1.2F/2.0F)*100.0F;
结果必须是60,但
c
等于
60.000002384185791
浮点运算中始终存在数字噪声。您应该根据所需精度进行处理。
double d = (1d / 2d) * 100;