为何divBuy变量在执行除法运算并完成初始化后仍被赋值为0?
问题原因与解决方案
这是个非常常见的整数除法陷阱,我来帮你拆解问题所在:
核心原因:整数除法的特性
在C#(从你的代码风格判断是C#)中,当两个整数类型的变量进行除法运算时,编译器会执行整数除法——也就是直接丢弃小数部分,只保留商的整数结果。
你的代码里:
buySum是int类型,值为1noOfIndicators是int类型,值为3
所以buySum / noOfIndicators本质是1 / 3的整数除法,结果直接是0,之后把这个0赋值给double类型的divBuy,自然它的值还是0——哪怕divBuy是浮点类型,也改变不了运算本身已经是整数除法的事实。
解决办法:强制触发浮点除法
只需要把其中一个操作数转换为浮点类型,让编译器执行浮点除法即可,有几种常用方式:
- 转换被除数为
double:
divBuy = (double)buySum / noOfIndicators;
- 转换除数为
double:
divBuy = buySum / (double)noOfIndicators;
- 如果业务允许,也可以直接将
buySum定义为double类型,但这种方式不如前两种灵活,毕竟很多场景下buySum需要保持整数计数的特性。
验证示例
你可以快速验证这个逻辑:
int num1 = 1; int num2 = 3; double wrongResult = num1 / num2; // 输出 0.0 double correctResult = (double)num1 / num2; // 输出 0.333333...
内容的提问来源于stack exchange,提问作者ameyashete
相关产品推荐
相关产品推荐

