C#中未特殊声明时整数除法结果不符预期?两种写法为何有差异?
为什么C#里小整数除以大整数得不到预期浮点结果?
这其实是C#的运算类型规则在起作用,我给你拆解清楚:
第一种情况:
float a = 2 / 4;
这里的2和4都是默认的int(整数)类型,C#会优先执行整数除法——这种除法的规则是直接舍弃小数部分,只保留商的整数部分。所以2 / 4的计算结果是整数0,之后再把这个0转换成float类型赋值给a,最终结果自然是0。第二种情况:
float a = 2; float b = 4; float c = a / b;
这里的a和b都被声明为float(浮点型),此时C#会执行浮点除法,这种除法会保留小数部分进行精确计算,所以2.0 / 4.0的结果就是0.5,赋值给c后就能得到你预期的结果。
如果你想在一行代码里直接得到浮点结果,也可以通过强制转换其中一个操作数为浮点型来触发浮点除法,比如:
float a = (float)2 / 4; // 结果为0.5 // 或者用后缀f标记浮点字面量 float a = 2f / 4; // 同样得到0.5
内容的提问来源于stack exchange,提问作者noobProgrammer
相关产品推荐
相关产品推荐

