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,它会根据它们被分配到的对象而改变其含义。)就个人而言,我更喜欢提升分子,因为它稍微清晰。就个人而言,我更喜欢提升分子,因为它稍微清晰。