C# C语言中的算术运算#
如果必须是50,为什么我的C#代码返回0C# 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.
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;