C# c中的奇怪结果#

C# c中的奇怪结果#,c#,C#,我的问题太奇怪,太简单了: double a = 1 / 2; MessageBox.Show(a.ToString()); 它显示0 我试过使用decimal,float,但总是0,你需要写: double a= 1 / 2.0d; 通过将int除以int编译器生成int结果,然后将其赋值给double 这和写作一样: int resultInt = 1/2; double a = resultInt; 通过在您的操作中指定2.0d,您明确表明了在分割后产生double的意图 你需要

我的问题太奇怪,太简单了:

double a = 1 / 2;
MessageBox.Show(a.ToString());
它显示
0
我试过使用
decimal
float
,但总是
0
,你需要写:

double a= 1 / 2.0d;
通过将
int
除以
int
编译器生成
int
结果,然后将其赋值给
double

这和写作一样:

 int resultInt = 1/2;
 double a = resultInt;
通过在您的操作中指定
2.0d
,您明确表明了在分割后产生
double
的意图

你需要写:

double a= 1 / 2.0d;
通过将
int
除以
int
编译器生成
int
结果,然后将其赋值给
double

这和写作一样:

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

通过在您的操作中指定
2.0d
,您明确表明了在分割后产生
double
的意图

1
2
都被视为整数常量。
int
除以
int
的结果是另一个
int
,然后再转换为
double
。通过使用
d
作为后缀或提供小数点,向编译器指示至少一个常量是双精度的

e、 g


1
2
都被视为整数常量。
int
除以
int
的结果是另一个
int
,然后再转换为
double
。通过使用
d
作为后缀或提供小数点,向编译器指示至少一个常量是双精度的

e、 g


除法是在整数算术中执行的,这意味着在将结果分配给
double
类型之前,您将失去精度

将其中一个文本升级为双精度,以强制以浮点形式执行计算。i、 e.写作

double a = 1.0 / 2;

除法是在整数算术中执行的,这意味着在将结果分配给
double
类型之前,您将失去精度

将其中一个文本升级为双精度,以强制以浮点形式执行计算。i、 e.写作

double a = 1.0 / 2;
试试这个:

双a=(双)1/(双)2

关于,

试试这个:

双a=(双)1/(双)2


关于,

,因为1/2的整数除法为零。不管你把零赋给什么,你需要理解它们之间的区别以及编译器处理输入的方式!(int)1/(int)2将产生int的结果!这个故事的寓意在于,对于C#中的大多数表达式,表达式的类型分析独立于它被指定的内容
1/2
不会因为将其分配给double而改变其值。(这条规则的例外是lambdas,它会根据它们被分配到的对象而改变它们的含义。)因为1/2的整数除法是零。不管你把零赋给什么,你需要理解它们之间的区别以及编译器处理输入的方式!(int)1/(int)2将产生int的结果!这个故事的寓意在于,对于C#中的大多数表达式,表达式的类型分析独立于它被指定的内容
1/2
不会因为将其分配给double而改变其值。(这条规则的例外是lambdas,它会根据它们被分配到的对象而改变其含义。)就个人而言,我更喜欢提升分子,因为它稍微清晰。就个人而言,我更喜欢提升分子,因为它稍微清晰。